Меня интересует следующий вариант использования и самый простой и элегантный способ добиться этого в Laravel.
В основном у меня будет таблица пользователей
id, name, email, password
Я также создам модель SuggestedUser, чтобы предложить пользователям, за которыми пользователь хотел бы подписаться, с указанием причины, по которой они должны подписаться на этого пользователя.
id user_id, suggested_id, reason
В моем классе пользователей достаточно просто связать эти два
public function suggestedUsers()
{
return $this->hasMany(SuggestedUser::class);
}
Так что теперь я могу сделать
$user->suggestedUsers и получить результаты сводной таблицы
=> Illuminate\Database\Eloquent\Collection {#1881
all: [
App\Models\PartnerSuggestion {#1939
id: 1,
user_id: 1,
partner_id: 86,
reason: "You liked similar posts",
created_at: null,
updated_at: null,
},
],
}
Но на самом деле я хочу вернуть коллекцию User::class
вместо коллекции сводки.
так что, когда я выполняю $user->suggestedUsers, я получаю что-то вроде этого, включая причину
Illuminate\Database\Eloquent\Collection {#1940
all: [
App\Models\User {#1941
id: 86,
first_name: "Eugene",
last_name: "Simonis",
reason: "You liked similar posts"
},
App\Models\User {#1942
id: 95,
first_name: "Wilfred",
last_name: "Stamm",
reason: "They viewed your profile"
},
],
}
Мой вопрос действительно заключается в том, каким будет самый чистый и элегантный способ сделать это? Нужно ли мне избавиться от сводной таблицы и создать связь, которая ссылается сама на себя? Я просмотрел такие пакеты, как baum, но по причинам (последний активный 4 года назад) я бы предпочел сделать это без пакета.