Я пытаюсь создать мессенджер, в котором пользователи могут присоединяться к потокам, и поэтому у меня есть четыре таблицы:
users
id - integer
name - string
threads
id - integer
name - string
created_at - dateTime
updated_at - dateTime
participants
user_id - integer
threads_id - integer
created_at - dateTime
updated_at - dateTime
deleted_at - dateTime
messages
id - integer
user_id - integer
thread_id - integer
text - string
created_at - dateTime
updated_at - dateTime
deleted_at - dateTime
У пользователя:
threads(){
return $this->belongsToMany(
Thread::class,
'participants',
'user_id',
'thread_id'
)
->withTimestamps()
->withPivot('thread_id', 'user_id', 'deleted_at')
->orderBy('created_at', 'desc');
}
Теперь я пытаюсь получитьсвязь с сообщениями, должны быть видны только сообщения, которые после присоединения к потоку:
public function messagesThroughThreads()
{
$relation = $this->hasManyThrough(
Message::class,
$this->threads(),
'user_id',
'thread_id',
'id',
'id'
)
->orderBy('updated_at', 'desc');
return $relation;
}
на самом деле, это не работает, и я получаю Модели через:
public function messagesThroughThreads(bool $show_deleted = false)
{
$messages = collect([]);
foreach ($this->threads as $thread){
if($thread->pivot->deleted_at){
$m = $thread->messages_model()->whereBetween('messages.created_at', [$thread->pivot->deleted_at, $thread->pivot->created_at])->get();
}else{
$m = $thread->messages_model()->where('messages.created_at', '>=', $thread->pivot->created_at)->get();
}
$messages = $messages->merge($m->toArray());
}
return $messages->unique();
}
Есть идеи, как мне получить экземпляр отношения с такими же условиями?