2015-01-06 6 views
1

Я имею следующие таблицы, Вопросы, Пользователи, Причины и Изображения. В основном Вопросы имеют множество Причины , и моя цель - отобразить образ прикрепления «Причины», а также автора сообщения (пользователи).
CakePHP-3.0 несколько belongsTo ассоциации

1. Users table associated with Reasons
2. Both Users and Reasons are associated with Images table (foreign key 'image_id').

Он работает в запросе находят при связывании

'Reasons.Images' or 'Reasons.Users.Images'

но не оба! Это мой код, который возвращается только для «Причины».

 
$this->Issues->findById($id)->contain([ 
    'Reasons.Images', 
    'Reasons.Users.Images' 
]);
Итак, как я получаю ассоциацию изображений обеих таблиц или должен ли мой подход быть другим?

+0

На самом деле я не получаю ваш ответ и как это решает что угодно. Почему в вашей проблеме есть аргумент 'reason_id', когда это должно быть ассоциацией' Issue hasMany Reason'? Также порядок тот же, что и в вашем вопросе, вы только что добавили еще одну оболочку (соответственно конфигурацию сдерживания)? Кроме того, поиск в вашем вопросе отлично подходит для меня, как есть, результат будет содержать причины с их ассоциированным изображением и пользователем, где пользователи также имеют свой образ. – ndm

+0

@ndm: Может быть, мой способ объяснить вам неясен. Я должен был выслать свои ошибочные ответы раньше. Но в основном, для поиска, что я допросил ... Я не получил «Картинки», когда получил «Users.Images» ... И это часть моей основной ассоциации, в которой я работаю. Поэтому, когда я понял правильный способ использования ассоциаций (как я уже упоминал в своем ответе), я смог получить данные, как ожидалось. Поэтому я только что опубликовал свой ответ. –

ответ

4

Мне удалось решить эту проблему !! Использование ассоциаций в правильном порядке решило бы проблему.
Это основной ответ от Вопросы table.

 
Array 
    (
     [id] => 2 
     [content] => This is an issue!! 
     [reason_id] => 3 
     [image_id] => 15 
     [user_id] => 21 
    ) 

Чтобы устранить проблемы в получении изображений выпуска ([image_id] => 15), а также пользователя аватара (для [user_id] => 21), я просто перефразировал ассоциации (Причины, изображения и Пользователи) в обратном порядке вышеуказанного ответа ...

$this->Issues->findById($id)->contain([ 
'Reasons.Images', 
'Reasons.Users.Images', 
'Reasons.Users => function($t){ 
    return $t 
     ->select(['user_id','username','image_id']); 
} 
]); 

Это работает отлично, как ожидалось! Может быть, кто-то может помочь кому-нибудь в какой-то момент! Благодаря!!

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