如何在CakePHP中禁用get last inserted id 问题:
我正在使用一个具有复合主键的数据库,CakePHP不支持这一点 因此,当我保存一些信息时,CakePHP尝试获取最后插入的id,但返回一些错误(正是因为此表/模型没有“一个主键”,而是有两个或多个主键) 那么,我怎样才能禁用它呢 注意:我想要执行最后一个查询和所有其他信息,而不是最后插入的id操作 测验 我尝试了很多将CakePHP支持修改为Compositive主键的解决方案,但是,只有对core的修改有效,我知道这不是一个好的做法,所以我放弃了 修改CakePHP内核以使用复合主键 不是一个好的做法,但是,如果你需要 注意:我尽力了,但我的代码可能不是最好的选择,很抱歉“multiplePrimarykey,不要使用compositePrimaryKey” git差异: 总之如何在CakePHP中禁用get last inserted id 问题:,php,postgresql,cakephp,postgresql-8.4,Php,Postgresql,Cakephp,Postgresql 8.4,我正在使用一个具有复合主键的数据库,CakePHP不支持这一点 因此,当我保存一些信息时,CakePHP尝试获取最后插入的id,但返回一些错误(正是因为此表/模型没有“一个主键”,而是有两个或多个主键) 那么,我怎样才能禁用它呢 注意:我想要执行最后一个查询和所有其他信息,而不是最后插入的id操作 测验 我尝试了很多将CakePHP支持修改为Compositive主键的解决方案,但是,只有对core的修改有效,我知道这不是一个好的做法,所以我放弃了 修改CakePHP内核以使用复合主键 不是一个
// 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
- 崇高文本2
抱歉,我的英文版由于CakePHP中不支持复合键,您将不得不使用执行操作。我遵循博客的说明,并且我可以使用自定义的
Model.php
和DboSource.php
,而无需更改CakePHP core的原始文件
帖子:
使用自己的类而不是核心类
比方说,您希望在不覆盖核心文件夹的情况下对核心文件应用修复程序,或者希望完全替换文件
只需在/Lib文件夹中使用相同的文件夹结构即可
拥有“正式认证”
/app/Lib/Controller/Component/Auth/FormAuthenticate.php
与CakePHP核心文件的差异
我的代码与您在此处找到的原始cakephp核心的差异:
解决方案
我在github中创建了一个存储库,其中包含CakePHP 2.x中复合主键工作所需的所有文件
github:
此更改允许您按照以下说明在模型中使用复合主模式:
// Add this in your model
public $primaryKey = false;
public $compositePrimaryKey = array('key_one', 'key_two', '........');
我希望这对其他人有所帮助。你应该将你正在对core所做的修改发布到core上,以使其正常工作。这将帮助人们了解什么在起作用,以及如何将这些更改从core中提取出来并导入到你的应用程序中。坦率地说,没有必要使用复合主键。这很好,当然。但不需要这样做ngs有效。当你只需添加一个简单的“id”时,为什么要让生活变得困难并开始四处闯荡列作为单个主键?坦率地说:任何不能处理像复合键这样简单的东西的框架都是无用的。当你可以替换框架时,为什么要搞砸你的数据库?我放弃了Cake,因为我在v1时代做了太多的更改。@mark我在处理客户数据库,不是我的。我不能修改数据库表或主键或任何我想要的,因为有一些其他应用程序使用这个数据库,所以,这是不可能的。当然,我知道复合主键是一个糟糕的做法。无论如何,非常感谢asnwer.@joshua.paling我更改了很多字段,所以,我需要一些时间来获取所有更改并在这里发布。当然,我现在正在做的是什么,但是,如果我使用的是,我无法执行查询以及有关模型的其他信息(数据、验证等)。或者,如果我执行了
查询
,我需要手动执行许多操作。无论如何,非常感谢您的时间。