如何在CakePHP中禁用get last inserted id

时间:2013-11-26 12:27:58

标签: php postgresql cakephp postgresql-8.4

问题

我正在使用复合主键的数据库,CakePHP不支持。

因此,当我保存一些信息时,CakePHP尝试获取最后插入的id,但返回一些错误(正是因为这个表/模型没有'一个主键'而是两个或更多。

那么,我怎么能禁用它?

注意:我想要执行上次执行的查询以及所有其他通知,而不是最后插入的ID 操作

测试

我尝试了很多解决方案,用于修改CakePHP对compositve主键的支持,但是,只有核心的修改才有效,而且我知道这不是一个好的实践,所以我放弃了。

CakePHP核心中用于复合主键的修改

不是很好的实践,但是,如果你需要

注意:我尽力做到最好,但我的代码可能不是最好的选择,对不起“multiplePrimarykey,而不是使用compositePrimaryKey”

git diff: https://gist.github.com/patrickmaciel/7662749

总结

// Add this in your model
public $primaryKey = false;
public $multiplePrimaryKey = array('key_one', 'key_two');

// Done :)

环境

  • CakePHP 2.4.3
  • 作曲
  • PostgreSQL 8.4
  • Windows 7 x64
  • Sublime Text 2

抱歉我的英文

2 个答案:

答案 0 :(得分:0)

由于CakePHP中缺少对复合键的支持,您必须使用Model::query()执行操作

答案 1 :(得分:0)

我按照@mark博客的说明操作,我可以使用自定义Model.phpDboSource.php而无需更改CakePHP核心的原始文件。

发布: http://www.dereuromark.de/2011/10/31/freshly-baked-cake2-0-tips/

  

使用自己的类而不是核心类

     

假设您希望在不覆盖核心文件夹的情况下将修复程序应用于核心文件。或者您想要完全替换文件。

     

只需在/ Lib文件夹中使用相同的文件夹结构即可。为您   自己的“FormAuthenticate”   /app/Lib/Controller/Component/Auth/FormAuthenticate.php

与CakePHP核心文件的差异

我在这里找到的代码和原始cakephp核心的差异:https://gist.github.com/patrickmaciel/7662749

解决方案

我在github中创建了一个存储库,其中包含CakePHP 2.x中复合主键所需的所有文件。

github: https://github.com/patrickmaciel/cakephp-composite-primary-key

此更改允许您按照以下说明在模型中使用复合主要内容:

// Add this in your model
public $primaryKey = false;
public $compositePrimaryKey = array('key_one', 'key_two', '........');

我希望这有助于某人。