如果我getLastInsertId()在a之后立即做save(),它可以工作,但否则它不会.这在我的控制器中得到证明:
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
}
Run Code Online (Sandbox Code Playgroud)
请建议一种获得我想要的功能的方法.
小智 96
CakePHP有两种获取最后插入id的方法:Model::getLastInsertID()和Model::getInsertID().实际上这些方法是相同的,所以使用哪种方法并不重要.
echo $this->ModelName->getInsertID();
echo $this->ModelName->getLastInsertID();
Run Code Online (Sandbox Code Playgroud)
这种方法可以在cake/libs/model/model.php2768号线找到
Mik*_*e B 20
在Cake中,最后一个插入ID会自动保存在模型的id属性中.因此,如果您只是通过User模型插入用户,则可以通过$ User-> id访问最后一个插入ID
id - 此模型当前指向的记录的主键ID的值.数据库插入后自动设置.
阅读CakePHP API文档中有关模型属性的更多信息:http://api.cakephp.org/2.5/class-AppModel.html
编辑:我刚刚意识到Model :: getLastInsertID()与Model-> id基本相同
在更仔细地查看您的代码之后,很难准确地说出您正在使用不同的功能以及它们在宏观方案中存在的位置.这实际上可能更多是范围问题.您是否尝试在两个不同的请求中访问最后一个插入ID?
您能解释一下您的应用程序的流程以及它与您的问题的关系吗?
您需要进行插入(或更新,我相信)才能getLastInsertId()返回值.你能粘贴更多代码吗?
如果您从另一个控制器函数调用该函数,您也可以使用它$this->Form->id来获取所需的值.
这是找出最后插入的id的最佳方法.
$this->ModelName->getInsertID();
Run Code Online (Sandbox Code Playgroud)
另一种方式是使用
$this->ModelName->find('first',array('order'=>'id DESC'))
Run Code Online (Sandbox Code Playgroud)
使用save方法时,有几种方法可以获取最后插入的主键ID
$this->loadModel('Model');
$this->Model->save($this->data);
Run Code Online (Sandbox Code Playgroud)
这将返回模型当前模型的最后插入的id
$this->Model->getLastInsertId();
$this->Model-> getInsertID();
Run Code Online (Sandbox Code Playgroud)
这将返回给定模型名称的模型的最后插入ID
$this->Model->id;
Run Code Online (Sandbox Code Playgroud)
这将返回最后加载的模型的最后插入的id
$this->id;
Run Code Online (Sandbox Code Playgroud)
尝试在模型类中使用此代码(可能在AppModel中):
function get_sql_insert_id() {
$db =& ConnectionManager::getDataSource($this->useDbConfig);
return $db->lastInsertId();
}
Run Code Online (Sandbox Code Playgroud)
注意事项:MySql的LAST_INSERT_ID()函数仅适用于具有AUTO_INCREMENT字段的表(否则它只返回0).如果主键没有AUTO_INCREMENT属性,则可能是导致问题的原因.
小智 6
尝试使用此代码.尝试将其设置为变量,以便您可以在其他函数中使用它.:)
$variable = $this->ModelName->getLastInsertId();
Run Code Online (Sandbox Code Playgroud)
在PHP原生中,试试这个.
$variable = mysqli_insert_id();
Run Code Online (Sandbox Code Playgroud)
这将返回最后加载的模型的最后插入的 id
$this->id;
Run Code Online (Sandbox Code Playgroud)
这将返回具有给定模型名称的模型的最后插入 id
$this->Model->id;
Run Code Online (Sandbox Code Playgroud)
这将返回模型当前模型的最后插入的 id
CakePHP 有两种获取最后插入的 id 的方法:
Model::getLastInsertID()和Model::getInsertID().
echo $this->ModelName->getInsertID();
echo $this->ModelName->getLastInsertID();
Run Code Online (Sandbox Code Playgroud)
以下是选项:
echo $this->Registration->id;
echo $this->Registration->getInsertID();
echo $this->Registration->getLastInsertId();
Run Code Online (Sandbox Code Playgroud)
在这里,您可以替换Registration为您的型号名称。
谢谢
| 归档时间: |
|
| 查看次数: |
115048 次 |
| 最近记录: |