如何在CakePHP中禁用get last inserted id 问题:

如何在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内核以使用复合主键 不是一个

我正在使用一个具有复合主键的数据库,CakePHP不支持这一点

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

那么,我怎样才能禁用它呢

注意:我想要执行最后一个查询和所有其他信息,而不是最后插入的id操作

测验 我尝试了很多将CakePHP支持修改为Compositive主键的解决方案,但是,只有对core的修改有效,我知道这不是一个好的做法,所以我放弃了

修改CakePHP内核以使用复合主键 不是一个好的做法,但是,如果你需要

注意:我尽力了,但我的代码可能不是最好的选择,很抱歉“multiplePrimarykey,不要使用compositePrimaryKey”

git差异:

总之

// 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我更改了很多字段,所以,我需要一些时间来获取所有更改并在这里发布。当然,我现在正在做的是什么,但是,如果我使用的是,我无法执行查询以及有关模型的其他信息(数据、验证等)。或者,如果我执行了
查询
,我需要手动执行许多操作。无论如何,非常感谢您的时间。