Выберите только определенные поля из связанных моделей в CakePHP - PullRequest
3 голосов
/ 27 ноября 2010

У меня есть следующие отношения:

  • User hasMany UserNotification
  • Notification hasMany UserNotification
  • UserNotificationпринадлежат User, Notification

  • notifications Таблица содержит следующие столбцы: id, subject, content

  • *Таблица 1027 * имеет следующие столбцы: id, user_id, notification_id, status

В UsersController как я могу получить все уведомления от одного пользователя?(Это означает, что для каждого уведомления все эти данные: тема, содержание и статус).

А также, как я могу ограничить количество возвращаемых полей?Поскольку я делаю запрос от UsersController, я не хочу получать какие-либо поля из модели User в массиве find ().

Спасибо!

1 Ответ

3 голосов
/ 28 ноября 2010

Чтобы получить уведомления от UsersController, просто сделайте это:

$notifications = $this->User->Notification->find('all');

По сути, вы можете использовать ассоциацию для доступа к модели уведомлений.

Далее, чтобы ограничить поля, вы можете подойти к этому двумя способами. Сначала нужно установить для свойства $ recursive значение -1. ​​

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

var $recursive = -1;

Вы также можете поместить следующую строку перед вышеупомянутым оператором find ():

$this->User->Notification->recursive = -1;

Второй способ - использовать поведение Containable .

Поместите следующую строку в модель уведомлений (или AppModel для глобального эффекта):

var $actsAs = array('Containable');

Теперь, по умолчанию, он не будет тянуть модель пользователя. Но если вы когда-нибудь хотели, чтобы он передавался вместе с данными уведомления, тогда ваш запрос должен выглядеть следующим образом:

$notifications = $this->User->Notification->find('all', array(
    'contain' => array('User')
);

Надеюсь, это поможет!

...