2016-10-24 4 views
1
public function chats() 
{ 
    return $this->hasMany('App\Chat','sender_id')->orWhere('receiver_id',\Auth::id()); 
} 

Мое требование состоит в том, что я хочу получать сообщения, отправляемые или полученные пользователем. как я могу это сделать?Custom hasMany Relation Laravel

ответ

1

Следующий код должен сделать трюк:

public function chats() 
{ 
    return $this->hasMany('App\Chat','sender_id')->union($this->hasMany('App\Chat','receiver_id')); 
} 

Это возвращает отношение, которое является союзом из 2 запросов - тот, который извлекает сообщения в чате, где данный пользователь является отправителем и еще один, где приведено пользователь - получатель.

Теперь вы можете получить доступ к чатам пользователя с помощью $ user-> chats.

0

Вы были очень близки. hasMany() принимает прикован where() и orWhere() звонков, поэтому я хотел бы сделать этот запрос так:

public function chats() 
{ 
    return $this->hasMany('App\Chat') 
     ->where('sender_id', \Auth::id()) 
     ->orWhere('receiver_id', \Auth::id()); 
} 

После того как все будет правильно настроен, вы можете использовать $users->chats для доступа к списку чатов, которые были посланы или к текущему пользователю ,

+0

Я не думаю, что это сработает. По умолчанию hasMany будет пытаться подключиться к chats.user_id в качестве внешнего ключа по умолчанию. Если в записи чата нет поля user_id, оно не будет выполнено. – Brad

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