Я пытаюсь создать систему обмена сообщениями для сайта работы с использованием Laravel 5 и использования Eloquent ORM. Основная предпосылка заключается в том, что кто-то отправляет задание, и люди могут отвечать на это задание посредством сообщения. База данных MySQL структурирована так:Laravel Яркие отношения и подключение нескольких таблиц
**users table**
id
username
password
**jobs table**
id
user_id (FK with id on Users table)
slug
title
description
**conversations table**
id
job_id (FK with id on Jobs table)
**messages table**
id
conversation_id (FK with conversations table)
user_id (FK with id on users table)
message
last_read
**conversation_user table**
conversation_id (FK with id on Conversation table)
user_id (FK with id on Users table)
Когда пользователь находит работу им нравится, они могут отправить сообщение на работу создателя, которое в свою очередь, создать новый разговор. Затем вновь созданный идентификатор разговора передается в таблицу сообщений (рядом с текстом сообщения), а затем сводная таблица talk_user обновляется идентификатором беседы, а также двумя пользователями, которые участвуют в разговоре (т.е. работа и человек, посылающий сообщение)
у меня есть модель для каждой таблицы и краткое описание отношений являются:
**Job.php**
HasMany - Conversation model
BelongsTo - User model
**Conversation.php**
BelongsTo - Job model
HasMany - Message model
BelongsToMany - User model
**Message.php**
BelongsTo - Conversation model
BelongsTo - User model
**User.php**
HasMany - Job model
HasMany - Message model
BelongsToMany - Conversation model
Я установки области действия запроса в Conversation.php (мой Eloquent модель таблица «Разговоры»), которая выполняет задачу отображения разговоров, в которых участвует аутентифицированный пользователь:
public function scopeParticipatingIn($query, $id)
{
return $query->join('conversation_user', 'conversations.id', '=', 'conversation_user.conversation_id')
->where('conversation_user.user_id', $id)
->where('conversation_user.deleted_at', null)
->select('conversations.*')
->latest('updated_at');
}
и через мой Бесед Repository, я прохожу по результатам объема запроса на мой взгляд, в моем MessagesController так:
public function __construct(ConversationInterface $conversation)
{
$this->middleware('auth');
$this->conversation = $conversation;
}
public function index()
{
$currentUser = Auth::id();
$usersConversations = $this->conversation->ParticipatingIn($currentUser, 10);
return view('messages.index')->with([
'usersConversations' => $usersConversations
]);
}
и обращении ConversationInterface ограничена моей ConversationsRepo:
public $conversation;
private $message;
function __construct(Model $conversation, MessageInterface $message)
{
$this->conversation = $conversation;
$this->message = $message;
}
public function participatingIn($id, $paginate)
{
return $this->conversation->ParticipatingIn($id)->paginate($paginate);
}
Мой вопрос в том, что у меня есть то, что я считаю правильными отношениями, как я могу передать заголовок конкретного задания из job_id в таблице цепочек, а также первые несколько слов последнего сообщения который был отправлен в рамках разговора?