【问题标题】:CakePHP How to get latest auto incremented id after saving dataCakePHP如何在保存数据后获取最后一个自动增量ID
【发布时间】:2012-10-22 11:06:26
【问题描述】:

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

我想要做的是,在消息控制器的添加功能上,在线程表中创建一条记录(该表只有1个字段,主键和自增),然后将其id插入到消息中表连同我已经拥有的用户 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。有什么方法可以获取 id,还是我保存错误?

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

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

但后来我发现 lastId 函数不适用于手动查询,所以我恢复了。

【问题讨论】:

    标签: cakephp


    【解决方案1】:

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

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

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

    线程 -> 或您的数据库表的任何其他名称

    【讨论】:

      【解决方案2】:

      您将$data 设置为基本上是一个ID 为' ' 的空数组。不确定您对此有何期待。 :) 尝试不要手动将“id”设置为空字符串,并保存一些数据。那么你应该得到ID就好了。

      【讨论】:

      • 我必须保存哪些数据?该表只有一个 id,自动增量列,我尝试了所有其他选项,这样可以保存,但不显示最后插入的 id...
      • 我认为更大的问题是,为什么你有一个单列不存储实际数据的表?
      • 我只是在提到的问题中实现架构,我已经修复它并且它现在正在工作,但我想知道如果表格有一个列/字段如何保存它
      • 试试 $this->save();或 $this->save(array('Thread'));
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-11
      • 2012-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-11
      相关资源
      最近更新 更多