【问题标题】:get the next auto increment id in cakephp在 cakephp 中获取下一个自动增量 id
【发布时间】:2013-11-26 13:54:46
【问题描述】:

我想在 appModel 中编写一个函数,为我想要的每个模型返回下一个自动递增的主 ID。例如在 UserController 我使用$this->user->nextId()。 我知道返回下一个自动递增主 ID 的查询:

SELECT Auto_increment FROM information_schema.tables WHERE table_name='table-name' AND table_schema='db-name'

【问题讨论】:

  • 你为什么要这个?这样的代码不可靠。考虑您网站上的两个用户同时存在。两者都同时检索 auto_inc,得到(比如说)42,并且都使用它。一个人将因违反主键而失败。这是一场比赛,有人会输。
  • 您应该学习如何正确使用该框架。然后你会发现你甚至从来不需要那个功能。除了 Marc B 提到的:使用它没有意义。
  • 是的,你是对的,但我需要它。
  • 用户模型只是一个例子。大多数时候一个用户需要下一个 id。
  • 我不明白。您似乎自己回答了您的问题:“我想在 appModel 中编写一个返回下一个自动递增主 ID 的函数”。 “我知道返回下一个自动递增主 ID 的查询”。

标签: php cakephp


【解决方案1】:

http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#model-query

所以你可以这样做:

public function nextId() {
    $result = $this->User->query("SELECT Auto_increment FROM information_schema.tables AS NextId  WHERE table_name='table-name' AND table_schema='db-name'");
    return $result[0]['NextId']['Auto_increment'];
}

您可能需要编辑退货声明。我不确定这是否是它将使用的确切格式。

不过,正如其他人所说,这不是你应该做的事情。

【讨论】:

猜你喜欢
  • 2011-10-09
  • 2020-01-29
  • 2016-01-08
  • 2010-11-25
  • 1970-01-01
  • 2012-10-22
  • 2012-07-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多