Я предполагаю, что у вас есть две связи из тем?Так как слишком произвольно использовать оба столбца и одно и то же отношение ... Например,
//On your MessageTopic model
public function sender(){
return $this->belongsToMany('App\User', 'message_topics_users', 'message_id', 'sender_id');
}
public function receiver(){
return $this->belongsToMany('App\User', 'message_topics_users', 'message_id', 'receiver_id'));
}
Тогда вы можете использовать whereHas и orWhereHas, например:
//Again assuming you have your User model loaded as $user
$topics = App\Topic::whereHas('sender', function($q) use($user){
$q->where('sender_id', '=', $user->id);
})
->orWhereHas('receiver', function($q) use($user){
$q->where('receiver_id', '=', $user->id
})
->orderByDesc('sent_at')
->get();
whereHas и orWhereHas оба запрашиваютмодель (в данном случае MessageTopic), проверяющая наличие указанной связи (App\Topic::whereHas('sender')...
).Они также позволяют вам пройти ограничение, которое вы ищете (function($q) use($user){ $q->... }
)
Таким образом, в основном говорится: «Дайте мне ТОЛЬКО MessageTopics, у которых есть Отправитель или Получатель с идентификатором $user->id
»