Я пытаюсь получить связанные модели того же типа из сводной таблицы.
У меня есть 2 модели, App\Models\User
и App\Models\Group
, а также сводная модель App\Pivots\GroupUser
Мои таблицы имеют следующую структуру
Пользователи
группа
group_user
В настоящее время я определил отношения как
В приложении / Models / User.php
public function groups()
{
return $this->belongsToMany(Group::class)->using(GroupUser::class);
}
В приложении / Models / Group.php
public function users()
{
return $this->belongsToMany(User::class)->using(GroupUser::class);
}
В приложении / Pivots / GroupUser.php
public function user()
{
return $this->belongsTo(User::class);
}
public function group()
{
return $this->belongsTo(Group::class);
}
Я пытаюсь определить отношение в своем классе User
, чтобы получить доступ ко всем другим пользователям, которые связаны с принадлежностью к той же группе. Называя это friends
. Пока я пробовал это:
приложение / модели / User.php
public function friends()
{
return $this->hasManyThrough(
User::class,
GroupUser::class,
'user_id',
'id'
);
}
Но в итоге он возвращает коллекцию только с тем пользователем, от которого я вызвал отношения. (так же, как работает collect($this);
У меня есть решение, которое работает, но не идеально.
приложение / модели / User.php
public function friends()
{
$friends = collect();
foreach($this->groups as $group) {
foreach($group->users as $user) {
if($friends->where('id', $user->id)->count() === 0) {
$friends->push($user);
}
}
}
return $friends;
}
Есть ли способ сделать это, используя hasManyThrough
или какую-либо другую функцию Eloquent?
Спасибо.