CakePHP中的getLastInsertId()等价于什么?

如果我在getLastInsertId()之后立即getLastInsertId() ,它将起作用,否则不起作用。 这是在我的控制器中演示的:

 function designpage() { //to create a form Untitled $this->Form->saveField('name','Untitled Form'); echo $this->Form->getLastInsertId(); //here it works } function insertformname() { echo $this->Form->getLastInsertId(); //this doesnt echo at all } 

请build议一种方法来获得我想要的function。

CakePHP有两个获取最后插入的ID的方法: Model::getLastInsertID()Model::getInsertID() 。 其实这些方法是相同的,所以你使用哪种方法并不重要。

 echo $this->ModelName->getInsertID(); echo $this->ModelName->getLastInsertID(); 

这个方法可以在2768行的cake/libs/model/model.phpfind

只要使用:

 $this->Model->id; 

在Cake中,最后一个插入ID会自动保存在模型的id属性中。 所以如果你只是通过用户模型插入一个用户,最后一个插入ID可以通过$ User-> id来访问

id – 此模型当前指向的logging的主键ID的值。 数据库插入后自动设置。

在CakePHP API文档中了解更多关于模型属性的内容: http : //api.cakephp.org/2.5/class-AppModel.html

编辑:我只是意识到Model :: getLastInsertID()是基本上是模型 – > ID相同的东西

在仔细查看你的代码之后,很难准确地告诉你在不同的function上做什么,以及它们存在于macros伟的计划中。 这实际上可能是一个范围问题。 你是否试图在两个不同的请求中访问最后一个插入ID?

你能解释一下你的应用程序的stream程以及它与你的问题的关系吗?

你需要做一个插入(或更新,我相信)为了getLastInsertId()返回一个值。 你能粘贴更多的代码吗?

如果您从另一个控制器函数调用该函数,您也可以使用$this->Form->id来获得所需的值。

这是找出最后插入的id的最好方法。

 $this->ModelName->getInsertID(); 

其他方式正在使用

 $this->ModelName->find('first',array('order'=>'id DESC')) 

有几种方法可以在使用save方法时获取最后插入的主键id

 $this->loadModel('Model'); $this->Model->save($this->data); 

这将返回模型当前模型的最后插入的id

 $this->Model->getLastInsertId(); $this->Model-> getInsertID(); 

这将返回给定模型名称的模型的最后插入的id

 $this->Model->id; 

这将返回上次加载的模型的最后插入的ID

 $this->id; 

尝试在您的模型类(也许在AppModel中)使用此代码:

 function get_sql_insert_id() { $db =& ConnectionManager::getDataSource($this->useDbConfig); return $db->lastInsertId(); } 

警告:MySql的LAST_INSERT_ID()函数只适用于带有AUTO_INCREMENT字段的表(否则它只返回0)。 如果您的主键没有AUTO_INCREMENT属性,那可能是您的问题的原因。

尝试使用此代码。 尝试将其设置为一个variables,以便您可以在其他函数中使用它。 🙂

 $variable = $this->ModelName->getLastInsertId(); 

在PHP本地,试试这个。

 $variable = mysqli_insert_id(); 

这将返回上次加载的模型的最后插入的ID

 $this->id; 

这将返回给定模型名称的模型的最后插入的id

 $this->Model->id; 

这将返回模型当前模型的最后插入的id

CakePHP有两个获取最后插入的ID的方法: Model::getLastInsertID()Model::getInsertID()

 echo $this->ModelName->getInsertID(); echo $this->ModelName->getLastInsertID(); 

以下是选项:

 echo $this->Registration->id; echo $this->Registration->getInsertID(); echo $this->Registration->getLastInsertId(); 

在这里,您可以用您的型号名称replaceRegistration

谢谢

使用这个

 function designpage() { //to create a form Untitled $this->Form->saveField('name','Untitled Form'); echo $this->Form->id; //here it works 

}

你可以用很多方法得到最后一个插入的ID。像Model name是用户,所以最好的方式来获取最后插入的ID是

 $this->User->id; // For User Model 

你也可以使用Model函数,但是下面的代码会返回最后插入的带有给定模型名称的模型id,这个例子将会返回User模型数据

 $this->User->getLastInsertId(); $this->User->getInsertID(); 

当使用save() ,最后一个插入ID被设置为模型的$id属性。 所以:

 if ($this->Model->save()) { printf('Last insert ID was %s', $this->Model->id); } 

每次在模型上调用一个保存方法时,Cake在内部调用Model :: getLastInsertId()并将结果存储到模型类属性id中,因此在调用save()之后,不需要调用Model :: getLastInsertId()或inserId (),因为这个值可以像这样直接访问

 $id = $this->id;// within a model $id = $this->{$this->modelName}->id;// in a controller 

插入数据后,我们可以使用下面的代码来获取最近添加的logging的ID:

  $last_insert_id=$this->Model->id; 

每次在任何模型上执行插入操作时,cake会在内部提取最后一个插入标识并将其设置为Model-> id属性。

所以可以通过$ Model-> id直接访问它;不需要再次查询lastInsertId。

我认为它适用于getLastInsertId()如果你在MySQL数据库中使用InnoDB表。 你也可以使用$this->Model->id

 $Machinedispatch = $this->Machinedispatch->find('first',array('order'=>array('Machinedispatch.id DESC'))); 

最简单的方法find最后插入的行。 对于我getLastInsertId()这不起作用。

其实你是以错误的方式使用getLastInsertId或getInsertId。 getLastInsertId()仅用于save()方法之后。 在手动插入后它甚至不能工作,因为Cake引擎正在将$ this – > _ insertID存储在可通过getLastInsertId或getInsertId检索的save方法内的mysql_insert_id。 现在在你的情况

 $this->Model->id 

要么

 $this->Model->find('first',array('order'=>'id DESC')) 

会做。

这很有趣,我也偶然发现了这个问题。 你所问的或许是如何得到某个模型的最后一个ID,而不pipe它是否被插入。 为了进一步理解getInsertID作用,我们需要看一下源代码:

链接1:http://api20.cakephp.org/view_source/model#line-3375

 public function getInsertID() { return $this->_insertID } 

是的,这是该函数中唯一的代码。 这意味着cakephpcaching最后插入的ID,而不是从数据库中检索。 这就是为什么当你没有在模型上创build任何logging时,如果你使用这个function,你什么也得不到。

我做了一个小函数来获取某个表的最后一个ID,但请注意,这不应该被用作getLastID()getLastInsertID()的替代,因为它具有完全不同的目的。

如下所示,将函数lastID()添加到AppModel,以便可以在系统范围内使用它。 它是有限制的,不能用于具有复合主键的模型。

 class AppModel extends Model { public function lastID() { $data = $this->find('first', array( 'order' => array($this->primaryKey . ' DESC'), 'fields' => array($this->primaryKey) ) ); return $data[$this->name][$this->primaryKey]; } } 

原始来源:类模型

在CakePHP中,您可以通过以下方式获取它:Model :: getInsertID()//返回此模型插入的最后一条logging的ID。 Model :: getLastInsertID()//别名getInsertID()。

 $this->Model->field('id', null, 'id DESC')