2016-07-16 10 views
2

Я имею в виду эту тему Laravel 4 Relationship: messaging systemСистема личных сообщений Laravel. Принеси все пользователи, связанные выдавать

я создал таблицы и также отношения внутри как модель «Message» и «Пользователь». Теперь я могу получить список сообщений, отправленных мной через эту команду user :: find ($ myid) -> sent_messages() -> get();

Мои вопросы

Как мы можем получить список пользователей, которые были обмена сообщениями для меня (зарегистрированный пользователь)? Я имею в виду, что в таблице сообщений «from» может быть зарегистрирован пользователь (1) или «to» может быть зарегистрирован в пользователе (1). Я хочу получить список других пользователей, которые общаются с пользователем (зарегистрированным пользователем).

Надеюсь, вы поймете мой вопрос и помощь. Я новичок в laravel и пытаюсь изучить вещи и лучшие практики. Если у вас есть предложение использовать любую систему обмена сообщениями уже в github. Я нашел одно имя «Laravel-messenger», но не подходит для меня.

Ваши предложения и ответы приветствуются. БЛАГОДАРЯ

ответ

1

Может быть, вместо того, чтобы использовать таблицы user_messages (просто поместите его), вы просто изменить таблицу сообщений ниже форму:

Messages: id | from_user_id | to_user_id | content 

Затем вы можете сделать запрос:

$received = Messges::where('to_user_id','=',my_user_id); 
$send = Messges::where('from_user_id','=',my_user_id); 
$result = $received->union($send)->get(); 

(БОНУС: вы также может добавить столбец replay_from_message_id (null для первого сообщения), чтобы сохранить обратную последовательность сообщений (поток). И затем вы также можете добавить столбец first_message_id, чтобы упростить получение запроса потока)

+1

Запрос $ result = Messges :: where ('to_user_id', '=', my_user_id); Вернет ли сбор сообщений, где «to_user_id» = мой id правильно? Это означает те сообщения, которые кто-то отправил мне правильно? Что, если первое сообщение будет тем, кого я послал кому-то. WIll этот же запрос работает там тоже? Спасибо –

+0

если вы отправляете сообщения, которые вы отправляете кому-то, просто используйте: $ result = Messges :: where ('from_user_id', '=', my_user_id); (вы также можете использовать красноречивый 'union' to'merge 'этот два типа запросов). –

+0

В вышеупомянутом решении у вас также не возникнет проблем, когда какой-либо пользователь удалит сообщение. Затем вы можете добавить два булевых столбца «deleted_by_sender» и «deleted_by_receiver», если каждый из них истинен, тогда вы можете удалить строку. –