如何在cakephp中获取最后一个id

Jai*_*ngh 7 cakephp

我在cakephp中使用查询

$this->Menu->query("INSERT INTO frd_menus SET menuName= '".$_REQUEST['menuname']."'");
Run Code Online (Sandbox Code Playgroud)

如何在cakephp中获取此查询的最后一个插入ID?请指教.

XuD*_*ing 19

如果没有具体原因.

你应该用

$this->Menu->save($data)
Run Code Online (Sandbox Code Playgroud)

插入数据.然后你可以使用

$this->Menu->getLastInsertId();
Run Code Online (Sandbox Code Playgroud)

获取最后插入的ID.

  • 是!我不明白为什么有这么多人使用"Model :: query()"而不是常规的Model方法,如save,saveAssociated等. (2认同)
  • $ this-> Menu-> id也包含id,直接保存后,无需再次访问数据库. (2认同)

Rém*_*ras 11

在大多数情况下,您应该使用模型方法来查询数据库.

Model::query() 存在运行复杂查询,这些查询比使用模型方法更复杂,或者在您无法选择的情况下运行.

在您的情况下,这非常有用,因为Model::save()在框架中运行回调Model::id为您设置属性.

所以,这允许你立即取回它:

if ($this->Menu->save($data)) {
   $lastId = $this->Menu->id;
}
Run Code Online (Sandbox Code Playgroud)

小心!

另一方面,如其他回复所述,有以下方法:

Model::getLastInsertId()
Run Code Online (Sandbox Code Playgroud)

您必须以这种方法非常小心你SHOULD'NT用它,在这种使用情况下,因为它得到的最后插入,但不是你刚刚插入前面的代码语句中的最后!

如果用户(在服务器上的另一个并发请求期间)在save()和之间保存数据getLastInsertId(),它将返回第二个用户的数据!

那么,以下答案是这个用例的答案:


Man*_*tel 4

$this->Menu->getLastInsertId();
Run Code Online (Sandbox Code Playgroud)

你可以通过这个获取最后一个插入ID