在给定带ORDER和LIMIT的简单选择查询的情况下,在CakePHP中编写find()语句的正确方法是什么?

时间:2009-06-11 07:21:49

标签: php cakephp

如何使用cakephp中的find语句编写此查询

$this->Form->query("Select id from forms order by id DESC LIMIT 1")

5 个答案:

答案 0 :(得分:5)

这应该这样做:

$this->Form->find('all', array(
    'fields' => array('Form.id'),
    'order' => 'Form.id DESC',
    'limit' => 1
));

答案 1 :(得分:0)

查看文档:{​​{3}}

答案 2 :(得分:0)

我同意这里的第一个回复, 我要提两件事 我假设你有一个名为Form的模型,现在Cakephp有自己的FormHelper,有时可能存在名称冲突,当我在项目中创建了FilesController时出现了这个错误, 你也会得到一个格式为

的数组

$result['Form] => array(
                   [id] => 1
                   [name] => whatever)


等等,您可以轻松地使用它来获取您想要的任何数据。

答案 3 :(得分:0)

虽然应该找到('第一'),但真正的问题可能更简单。我只能假设进行此类查询的唯一原因是获取最后插入的ID。在与保存相同的“运行”中,您可以使用相同的名称在模型属性中获取插入的ID:

$this->ModelName->create($this->data);
if ($this->ModelName->save()) {
  $this->Session->setFlash('Saved it!');

  $id_of_new_row = $this->ModelName->id;
  $this->redirect(array('action' => 'view',$id_of_new_row));
}

答案 4 :(得分:0)

paolo所述,但在查询中添加“递归”:

$this->Form->find('all', array(
    'fields' => array('Form.id'), // just return the id, thank you
    'order' => 'Form.id DESC',    // sort the query result by id DESC
    'limit' => 1,                 // gimme the top id
    'recursive' => -1,            // don't scan associated models in the query
));

但我也会用

$this->Form->find('first', array(
     'fields' => array('Form.id'),
     'order' => array('Form.id DESC'),
     'recursive' => -1,
     )
);

哪个不短,但更能表达你想要的东西。

我建议你小心,因为已经有一个表格助手,可能会发生混乱。另一方面,您通常在视图中使用$ form变量,而这是控制器代码。