【问题标题】:CakePHP 2.x - How to insert a new manually created recordCakePHP 2.x - 如何插入一个新的手动创建的记录
【发布时间】:2015-08-06 15:23:23
【问题描述】:

我的模型中的以下函数更新现有记录而不是创建新记录。我没有在$data 变量中指定新的主键值,并希望避免指定它。

public function add( $prop1, $prop2 ) 
    {           
        $this->create();
        $data = array
        (
            'Model' => array
            (
                'prop1' => $prop1,
                'prop2' => $prop2
            )
        );
        $this->save( $data );
    } // add

感谢您的回答。

【问题讨论】:

    标签: model cakephp-2.0


    【解决方案1】:

    想出一种解决方法更便宜的时候到了。

    private function getNextPrimaryId()
    {
        $result = $this->query
        (
            "SHOW TABLE STATUS LIKE 'models';"
        );
        $next = $result[0]['TABLES']['Auto_increment'];
        return $next;
    } // getNextPrimaryId
    
    public function add( $prop1, $prop2 )
    {
        $data = array
        (
            'Model' => array
            (
                'model_primary_id' => $this->getNextPrimaryId(),
                'prop1' => $prop1,
                'prop2' => $prop2
            )
        );
        $this->create();
        $this->save( $data );
    } // add
    

    【讨论】:

    • 太糟糕了。如果只保存更新,则您有一个重大问题(可能与模型中的其他代码有关 - 不清楚,因为问题中的代码 自己说的话)。做这个答案中的事情只会让你找到未来的问题。
    • 我明白这一点 - 但这是我在该模式下仅有的两个功能 :-/ 将尝试在空闲时间艰难地找到它
    【解决方案2】:

    // 蛋糕 2.x

    $this->Model->create();
    $this->Model->save($data);
    

    我喜欢你定义 $data 的方式,看起来不错。

    ==========================编辑===================== =====

    天哪,我是个白痴。你在第一句话中说的是模型。

    不要使用'model' => array(

    从 $data 中取出该层,它应该可以在模型中使用。

    另外,你是对的,在model.php文件中,你不应该说

    $this->model->save($data);
    

    直接说

    $this->save($data);
    

    刚刚在下面进行了测试,它对我有用。

    public function add_from_model( $prop1, $prop2 ) {
    $this->create();
    $this->save(array('prop1' => $prop1, 'prop2' => $prop2));
    }
    

    (改了模型函数的名字,不知道要不要这样)

    【讨论】:

    • 我在 model 中有这个功能,而不是控制器。如果我是正确的(可能不是,我远离我的工作 PC),在我的模型结构中使用 $this->create() 而不是 $this->Model->create() 就足够了。不管怎样,谢谢你的建议。明天我会试试你的建议,如果它有效,我会告诉你。
    • 不出所料,我收到了Error: Call to a member function create() on a non-object
    【解决方案3】:

    最好的主意:

    $this->create();
    $this->save(array('prop1' => $prop1, 'prop2' => $prop2));
    

    不要这样做:

     $this->create(); 
    

    这有助于您的工作代码,在您的 Model Cakephp 2 中:

    $db = ConnectionManager::getDataSource('default'); 
    date_default_timezone_set('Asia/Ho_Chi_Minh'); 
    $_result = $db->create($Order, array('accountant', 'name','address_payment','account_id', 'order_type', 'order_code', 'order_datetime', 'order_status', 'no_more_email'), 
        array($_name_acc, $_name_acc, $_address_acc, $_acc_id, '1', CakeSession::read('order_code'), date("Y-m-d H:i:s"), '3', '1') 
    ); 
    $_new_order_id = $db->lastInsertId();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多