CakePHP: получить определенное поле таблицы в контроллере - PullRequest
7 голосов
/ 29 июля 2011

Я новичок в Cake и попытался найти лучшее решение для извлечения определенного поля, принадлежащего $ id:

Это моя функция просмотра в моем контроллере почты

function view($id = null) {
    if (!$id) {
        $this->Session->setFlash(__('Invalid post', true));
        $this->redirect(array('action' => 'index'));
    }
    $this->set('post', $this->Post->read(null, $id));
}

В таблице сообщений есть внешний ключ user_id. Мне нужно получить это конкретное поле, принадлежащее этому Post $ id.

Я читаю о функциях as find ('All), read () или просто отбрасываю нестандартный сеанс в представлении через:

$session->write('example') = $post['Post']['user_id];

Каков наилучший способ сделать это, я предпочитаю получить поле в контроллере. Спасибо!

Ответы [ 4 ]

19 голосов
/ 29 июля 2011

CakePHP имеет функцию field , которая должна делать именно это.

$this->Post->id = $id;
$user_id = $this->Post->field('user_id');

Для получения дополнительной информации об использовании поля см .: http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#model-field

Второй вариант - использовать функцию find и возвращать только несколько полей, если вам не нужен весь объект Post. Также показано ниже использование условия вместо установки текущей публикации.

$this->Post->find('first', array(
  'conditions'=>array('id'=>$id),
  'fields'=>array('user_id')
));

Более подробную информацию можно найти по адресу: http://book.cakephp.org/2.0/en/models/retrieving-your-data.html

1 голос
/ 29 июля 2011
$this->Post->id = $id;
$this->Session->write('example',$this->Post->field('user_id'));
0 голосов
/ 19 апреля 2018

В CakePHP 3 вы можете использовать $this->Model->get() для получения сущности, а затем напрямую ссылаться на обязательное поле.

$fieldValue = $this->ModelName->get($id)->fieldName;
0 голосов
/ 14 сентября 2015

Попробуйте это, так как я не знаю, какие поля вам нужны, я предоставляю пример поля массива, установленного с помощью Magic Find Types:

$fields = ['title', 'body', 'created'];
$record = $this->Post->findById($id, $fields);

или несколько записей

$recordSet = $this->Post->findAllByTitle('The title', $fields);

* Обратите внимание, что второй пример не имеет большого смысла, если в столбце posts.title нет нескольких заголовков с именем «Заголовок».

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