У меня есть следующий код:
$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'
)
)
)
));
И объединения работают отлично, то есть возвращают User, Profile и MediaAsset. Однако, если бы я позволил Cake сделать это для меня, это привело бы к этой структуре: (пример 1)
User
Profile
---- MediaAsset
Однако руководство находит это следующим образом: (пример 2)
User
Profile
MediaAsset
В любом случае, без дополнительных запросов я могу получить его, как Cake?
Спасибо, Джош.
** Редактировать Чтобы уточнить, чего я пытаюсь достичь. В моей базе данных будет много таблиц, и многие из этих таблиц ссылаются на пользователя. Однако я не хочу извлекать их все, так как это пустая трата ресурсов. Из-за этого я указываю ручное объединение для запросов, которые я запускаю при каждом запросе, например для текущего пользователя.
Проблема в том, что мне нужно получить MediaAsset в профиле, и это нормально (см. пример 2). Но красивое форматирование Cake имеет гораздо больше смысла.
**В скроулер Эта находка приводит к возврату всего (Пользователь, Профиль, Гараж, Предпочтение, любая модель, имеющая user_id)
if (!$username || !$user = $this->find('first', array(
'conditions' => array('User.username' => $username),
'contain' => array(
'Profile'
)
))) {
throw new NotFoundException('User not found');
}
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 создан для того, чтобы делать такие вещи для вас, не лучше ли было бы связать его через ассоциации моделей? - person scrowler   schedule 16.01.2014'contain' => array(Associated, models, you, DO, want, here)
в вызов поиска: book.cakephp.org/2.0/en/core-libraries/behaviors/ - person scrowler   schedule 16.01.2014