最后在cakephp中插入了id

时间:2012-01-25 13:50:23

标签: mysql cakephp

我使用此代码,但它不能在cakephp中运行,代码是:

$inserted = $this->get_live->query("INSERT INTO myaccounts (fname) values('test');

在此之后使用:

$lead_id = $this->get_live->query("SELECT LAST_INSERT_ID()");

这是有效的,但只有一次。

3 个答案:

答案 0 :(得分:6)

试试这个。少打字。在您的控制器中,将数据保存到数据库非常简单:

public function add() {
    $data = "test";
    $this->Myaccount->save($data);
    // $this->set sends controller variables to the view
    $this->set("last", $this->Myaccount->getLastInsertId());
}

您可以遍历数据数组以使用foreach保存,在每个数据后返回insertId,或者您可以使用Cake的saveAll()方法。

Myaccount是与您的控制器关联的Model对象。 Cake的命名约定要求一个名为“myaccounts”的表具有一个名为“Myaccount”的模型类和一个名为“Myaccounts_Controller”的控制器。视图文件将位于/ app / views / myaccounts / ...中,并将以您的控制器方法命名。因此,如果您的控制器中有一个函数add()...方法,那么您的视图将是/app/Views/Myaccounts/add.ctp。

save()方法生成INSERT语句。如果要保存的数据位于$this->data,则可以跳过传递参数;它默认会保存$ this->数据。 save()甚至会根据您数据中UPDATE的存在,自动检测是生成INSERT还是id语句。

根据经验,如果你在Cake中的任何一点使用原始的SQL查询,你可能做错了。我还没有碰到一个如此怪异的查询,以至于Cake的ORM无法对其进行建模。

http://book.cakephp.org/2.0/en/models/saving-your-data.html

http://book.cakephp.org/2.0/en/models/additional-methods-and-properties.html?highlight=getlastinsertid

HTH:)

答案 1 :(得分:2)

您可以获取last inserted record id(适用于cakePHP 1.3.xcakePHP 2.x

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

或者,您可以使用:

echo $this->ModelName->getInsertID();
在第2775行的cake / libs / model / model.php中找到

CakePHP 1.3.x

在第3167行的lib / Cake / Model / Model.php中找到

CakePHP 2.x

注意:如果您手动运行插入查询,则此功能不起作用

答案 2 :(得分:0)

pr($this->Model->save($data));
id => '1'

id是最后插入的值