我在PostgreSQL中有一个旧数据库,多个主键。
当我尝试保存这些表中的任何信息时,发生错误,因为 CakePHP 试图获取 lastInsertId 。因为,正如我们所知,CakePHP不支持多个主键。
所以,我想知道,如何禁用此功能/选项?
我试过这个,但没有按预期工作。
$this->OrderDrinkBase->saveAll(
$drinkBases,
array('callbacks' => false, 'validate' => false)
);
上面的解决方案有效,所以我批准了答案。 但是,我真的想要解释如何在某些情况下禁用CakePHP中的函数lastInsertId。
答案 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/