Возможно ли иметь отношение hasMany на двух столбцах?
Моя таблица имеет два столбца: user_id
и related_user_id
.
Я хочу, чтобы мое отношение соответствовало любому из столбцов.
В моей модели у меня есть
public function userRelations() { return $this->hasMany('App\UserRelation'); }
select * from user_relations where user_relations.user_id in ('17', '18')
запрос: select * from user_relations where user_relations.user_id in ('17', '18')
.
Мне нужно выполнить запрос:
select * from user_relations where user_relations.user_id = 17 OR user_relations.related_user_id = 17
РЕДАКТИРОВАТЬ:
Я использую нетерпеливую загрузку, и я думаю, что это повлияет на то, как она будет работать.
$cause = Cause::with('donations.user.userRelations')->where('active', '=', 1)->first();
Я не думаю, что можно сделать именно то, что вы просите.
Я думаю, вы должны относиться к ним как к отдельным отношениям, а затем создать новый метод для модели, чтобы получить коллекцию обоих.
public function userRelations() { return $this->hasMany('App\UserRelation'); } public function relatedUserRelations() { return $this->hasMany('App\UserRelation', 'related_user_id'); } public function allUserRelations() { return $this->userRelations->merge($this->relatedUserRelations); }
Таким образом, вы по-прежнему получаете выгоду от надежного кэширования загрузки и отношения к модели.
$cause = Cause::with('donations.user.userRelations', 'donations.user.relatedUserRelations') ->where('active', 1)->first(); $userRelations = $cause->donations[0]->user->allUserRelations();