2015-11-14 2 views
0

Моя модель имеетCakePHP 3: Получение глубоких ассоциаций

Conversations - hasMany - Messages

Conversations - hasMany - ConversationsRecipients

ConversationsRecipients - belongTo - Users или Applicants (в зависимости от флага, установленного поля recipient_type . Если recipient_type A, то это означает, что заявители)

S О, когда я пытаюсь получить разговоры для конкретного заявителя, я использую следующий код

$conversationsTable = TableRegistry::get('Conversations'); 
     $conversations = $conversationsTable->find() 
      ->join([ 
       'ConversationsRecipients' => [ 
        'table' => 'conversations_recipients', 
        'type' => 'inner', 
        'conditions' => ['recipient_id' => $id, 'recipient_type' => 'A'] 
       ] 
      ]) 
      ->contain([ 
       'Messages.Users' => function ($q) { 
        return $q 
         ->select(['Users.username']) 
         ->contain(['UsersProfiles']); 
       }, 
       'Messages.Applicants' => function($q) { 
        return $q 
         ->select(['Applicants.firstname', 'Applicants.lastname']); 
       } 
      ]) 
      ->all(); 
     return $conversations; 

Это прекрасно работает - для одной части, за исключением - но он не извлекает глубоко Содержится модели - UsersProfiles. Я что-то упускаю?

ответ

1

Попробуйте это:

return $q 
    ->select(['Users.username']) 
    ->autoFields(true) 
    ->contain(['UsersProfiles']); 

При включении избранного в запросе, это всех, что торт будет включать в себя, если не включать вызов autoFields.

Смежные вопросы