У меня есть следующий код:Как повторить глубокий поиск Торт с ручной присоединяется
$current_user = $this->User->find('first', array(
'recursive' => -1,
'conditions' => array('User.id' => $user_id),
'fields' => array(
//User
'User.id',
//Profile
'Profile.user_id',
'Profile.id',
'Profile.first_name',
'Profile.last_name',
'Profile.media_asset_id',
//Profile Picture
'MediaAsset.id'
),
'joins' => array(
array(
'table' => 'profiles',
'alias' => 'Profile',
'type' => 'left',
'conditions' => array(
'Profile.user_id = User.id'
)
),
array(
'table' => 'media_assets',
'alias' => 'MediaAsset',
'type' => 'left',
'conditions' => array(
'MediaAsset.id = Profile.media_asset_id'
)
)
)
));
И стыки отлично работать, иначе, возвращая пользователя, профиль и MediaAsset. Однако, если я позволил Cake сделать это найти для меня это привело бы к этой структуре: (пример 1)
User
Profile
---- MediaAsset
Однако руководство находит его, как следует: (пример 2)
User
Profile
MediaAsset
Есть во всяком случае, не делая больше запросов, я могу получить его, похожий на Cake?
Спасибо, Джош.
** Редактировать Чтобы уточнить, чего я пытаюсь достичь. В моей базе данных будет много таблиц, и многие из этих таблиц свяжутся с User. Однако я не хочу извлекать их всех, поскольку это пустая трата ресурсов. Из-за этого я указываю ручные объединения для запросов, которые я запускаю для каждого запроса, например текущего пользователя.
Проблема в том, что мне нужно получить MediaAsset в профиле, что отлично (см. Пример 2). Но приятное форматирование Cake дает больше смысла.
** Для scrowler Это найти результаты возвращаются все (Пользователь, профиль, Гараж, предпочтение, любая модель, которая имеет user_id)
if (!$username || !$user = $this->find('first', array(
'conditions' => array('User.username' => $username),
'contain' => array(
'Profile'
)
))) {
throw new NotFoundException('User not found');
}
Можете ли вы объяснить немного больше? – Anubhav
@ Анубхав, написали править. Это помогает? – jshthornton
Вы после вложенного массива для MediaAsset? Если это так, и вы не хотите использовать отношения модели Cake, я думаю, вам, возможно, придется написать его вручную ... например. 'foreach ($ current_user as $ key => $ user) {$ current_user [$ key] ['MediaAsset'] = $ this-> MediaAsset-> find ('all', array ('conditions' => array ('MediaAsset .id '=> $ user [' Profile '] [' media_asset_id ']))); } '- однако, поскольку Cake создан для создания подобных вещей для вас, не было бы лучше связать его с помощью ассоциаций моделей? –