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.php
find
只要使用:
$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')