CakePHP保存数据后如何获取上次自动增量ID

时间:2012-11-01 19:34:38

标签: cakephp

我也检查过this个问题和this个问题。我正在尝试实现this问题中描述的模型。

我想要做的是,在消息控制器的add函数中,在线程表中创建一条记录(该表只有1个字段,即主键和自动增量),然后获取其id并将其插入到消息中table以及我已经拥有的用户ID,然后将其保存在message_read_state和thread_participant表中。

这是我在线程模型中尝试做的事情:

function saveThreadAndGetId(){
    //$data= array('Thread' => array());
    $data= array('id' => ' ');
   //Debugger::dump(print_r($data));
   $this->save($data);
   debug('id: '.$this->id);
    $threadId = $this->getInsertID();
    debug($threadId);
    $threadId = $this->getLastInsertId();
    debug($threadId);
    die();
    return $threadId;
}


$data= array('id' => ' ');

上述函数中的这一行在线程表中添加了一行,但我无法检索id。我有什么方法可以获得身份证,或者我是否错误地保存了它?

最初我在消息控制器中进行查询:

$this->Thread->query('INSERT INTO threads VALUES();');

但后来我发现lastId函数不能用于手动查询,所以我还原了。

2 个答案:

答案 0 :(得分:1)

您将$data基本上设置为ID为' '的空数组。不确定你的期望是什么。 :)尝试不要手动将'id'设置为空字符串,并保存一些数据。然后你应该得到这个ID。

答案 1 :(得分:0)

这里返回下一个自动增量值。

/* @return int */
private function getNextThreadId() {
    $result = $this->Thread->query("SHOW TABLE STATUS LIKE 'threads';");
    $next = $result[0]['TABLES']['Auto_increment'];
    return $next;
}

线程 - >或您的模型的任何其他名称

主题 - >或者db表的任何其他名称