Временно удалить объединения при использовании find (cakePHP) - PullRequest
1 голос
/ 27 апреля 2011

Я пытаюсь удалить соединения в течение одного find(). Все, что я хочу, - это получить подписки пользователя, а не все таблицы / поля, к которым они относятся.

Я пытался

$subscriptions = $this->User->find('first', 
    array(
        'fields'     => array('User.subscriptions'),
        'join'       => array(''),
        'conditions' => 
            array(
                'User.id'=> $userID
            )
));

Если оставить его с joins, это может стать проблемой производительности в будущем.

Ответы [ 2 ]

4 голосов
/ 27 апреля 2011

попробуйте добавить рекурсивное значение -1:

$subscriptions = $this->User->find('first', array(
    'fields' => array('User.subscriptions'),
    'join' => array(''),
    'conditions' => array(
        'User.id' => $userID
    ),
    'recursive' => -1
));

Рекурсивное значение -1 заставит запрос получить только поля из таблиц пользователя без каких-либо объединений.

3 голосов
/ 27 апреля 2011

Вы должны использовать сдерживаемое поведение.

В вашей пользовательской модели (или в AppModel) добавить это:

var $actsAs = array('Containable');

А затем на контроллере:

$this->User->contain();
$subscriptions = $this->User->find('first', array(
    'fields' => array('User.subscriptions'),
    'conditions' => array(
        'User.id' => $userID
    ),
));

В книге CakePHP больше документации http://book.cakephp.org/view/1323/Containable

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