Как правильно написать оператор find () в CakePHP с помощью простого запроса выбора с ORDER и LIMIT? - PullRequest
1 голос
/ 11 июня 2009

Как написать этот запрос, используя оператор find в cakephp

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

Ответы [ 5 ]

5 голосов
/ 11 июня 2009

Это должно сделать это:

$this->Form->find('all', array(
    'fields' => array('Form.id'),
    'order' => 'Form.id DESC',
    'limit' => 1
));
0 голосов
/ 09 июля 2009

Как сказал paolo , но добавив в запрос 'recursive':

$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 в представлениях, в то время как это код контроллера.

0 голосов
/ 11 июня 2009

Хотя это должно быть найдено ('first'), реальная проблема, вероятно, еще проще. Я могу только предположить, что единственная причина для выполнения такого запроса - получить последний вставленный идентификатор. В том же «прогоне» в качестве сохранения вы можете получить вставленный идентификатор в свойстве модели с тем же именем:

$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));
}
0 голосов
/ 11 июня 2009

Я согласен с первым ответом здесь, 2 вещи, которые я хотел бы упомянуть Я предполагаю, что у вас есть модель под названием Form, теперь Cakephp имеет свой собственный FormHelper, и иногда может возникнуть конфликт имен, я получил эту ошибку, когда я создал FilesController в моем проекте, Также вы получите обратно массив, который будет иметь вид


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


и т. Д., Вы можете легко использовать это, чтобы получить любые данные, которые вы хотите.

0 голосов
/ 11 июня 2009

Ознакомьтесь с документацией: http://book.cakephp.org/view/73/Retrieving-Your-Data

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...