2015-04-18 1 views
0

В Laravel 5, у меня есть база данных со следующей схемой:Как запросить сводные таблицы с несколькими отношениями с Laravel и красноречивым

| USERS | JOBS | CONVERSATIONS | MESSAGES  | CONVERSATION_USER | 
| id  | id | id   | id    | user_id   | 
| username | title | job_id  | conversation_id | conversation_id | 
| password |  |    | user_id   |     | 
|   |  |    | message   |     | 

Где моя conversation_user таблица представляет собой сводную таблицу.

Вопрос об экзамене: я пытаюсь использовать сводную таблицу convers_user для получения всех сообщений о разговоре, связанных с зарегистрированным пользователем, а затем использовать эти результаты для получения последнего сообщения, относящегося к этому разговору, а также заголовка к которой относятся разговоры.

В терминах SQL это соответствует:

SELECT t1.message, t2.title FROM 

(SELECT messages.`message`, messages.conversation_id FROM conversation_user 
INNER JOIN messages ON conversation_user.conversation_id=messages.conversation_id 
WHERE conversation_user.user_id=$user_id ORDER BY messages.id DESC) t1 

INNER JOIN 

(SELECT jobs.`title`, conversations.id FROM conversations INNER JOIN jobs ON 
conversations.job_id=jobs.id) t2 

ON t1.conversation_id=t2.id 

Однако я не могу понять, как добиться этого с красноречив!

Мои отношения ниже:

User model: 
$this->hasMany('job'); 
$this->hasMany('message'); 
$this->belongsToMany('conversation'); 

Job model: 
$this->belongsTo('user'); 
$this->hasMany('conversation'); 
$this->hasManyThrough('message', 'conversation'); 

Conversation model: 
$this->belongsTo('job'); 
$this->hasMany('message'); 
$this->belongsToMany('user'); 

Message model: 
$this->belongsTo('user'); 
$this->belongsTo('conversation'); 

ответ

0

Если я undestood правильно, это то, что вам нужно

$user = User::find(Auth::id()); 
    foreach($user->conversations()->with('messages', 'job')->get() as $conversation) 
    { 
     echo $conversation->job->title; 
     echo $conversation->messages->sortBy('id')->last()->message; 
    }