保存而不获取lastInsertId

时间:2013-08-12 22:18:11

标签: php cakephp

我在PostgreSQL中有一个旧数据库,多个主键

当我尝试保存这些表中的任何信息时,发生错误,因为 CakePHP 试图获取 lastInsertId 。因为,正如我们所知,CakePHP不支持多个主键

所以,我想知道,如何禁用此功能/选项?

我试过这个,但没有按预期工作。

$this->OrderDrinkBase->saveAll(
    $drinkBases,
    array('callbacks' => false, 'validate' => false)
);

上面的解决方案有效,所以我批准了答案。 但是,我真的想要解释如何在某些情况下禁用CakePHP中的函数lastInsertId。

1 个答案:

答案 0 :(得分:4)

使用以下代码

class GroupToUser extends AppModel {

    var $name = 'GroupToUser';
    var $useTable = 'groups_users';

    var $primaryKeyArray = array('user_id','group_id');

    function exists($reset = false) {
        if (!empty($this->__exists) && $reset !== true) {
            return $this->__exists;
        }
        $conditions = array();
        foreach ($this->primaryKeyArray as $pk) {
            if (isset($this->data[$this->alias][$pk]) && $this->data[$this->alias][$pk]) {
                $conditions[$this->alias.'.'.$pk] = $this->data[$this->alias][$pk];
            }
            else {
                $conditions[$this->alias.'.'.$pk] = 0;
            }
        }
        $query = array('conditions' => $conditions, 'fields' => array($this->alias.'.'.$this->primaryKey), 'recursive' => -1, 'callbacks' => false);
        if (is_array($reset)) {
            $query = array_merge($query, $reset);
        }
        if ($exists = $this->find('first', $query)) {
            $this->__exists = 1;
            $this->id = $exists[$this->alias][$this->primaryKey];
            return true;
        }
        else {
            return parent::exists($reset);
        }
    }

}

有关详细信息,请查看此处http://mrphp.com.au/blog/multiple-primary-keys-cakephp#.UhxzGD90klQ

或此http://miljenkobarbir.com/using-multiple-column-primary-key-in-cakephp-cascade-delete-problem/