我正在尝试使用数据透视表在两个模型之间创建关系。这是基本结构。
Users
id
name
Links
link_id
user_id_from
user_id_to
Checkout
id
user_id
text
我们的想法是User
已经为Checkouts
分配了Link
。他们还可以User
到其他User
。这将允许Checkout
访问分配给其他User
的任何Links
。例如,如果Checkout
中存在记录(3,5),则用户5将能够看到用户3的所有hasManyThrough
。
使用belongsToMany
或id
不是一个选项。这是因为当使用这些关系助手时,Eloquent仅通过主键(在这种情况下为Checkout
)进行链接。它不允许通过user_id
选择load
模型。
我可以假设使用usersLinkedToMe
,只需拨打load
(见下文),然后User
'结帐'。但我真的只想在一次通话中自己收集结账,而不必担心拉出嵌套在// The users (my) own checkouts
public function checkouts()
{
return $this->hasMany(Checkout::class, 'user_id');
}
// The users who are linked to me, sharing their checkouts with me
public function usersLinkedToMe() {
return $this->belongsToMany(User::class, 'links', 'user_id_to', 'user_id_from')
}
// The checkouts of the users who are linked to me (sharing with me)
public function linkedCheckouts()
{
return Checkout::whereIn('user_id', $this->usersLinkedToMe()->pluck('user_id_from')->toArray())->get();
}
对象中的结账。
因此,现在,这就是我建立关系的方式:
linkedCheckouts
当然焦点在于linkedCheckouts
。这符合我的要求。但由于我是Eloquent的新手,我觉得我只是在解决这个问题。似乎应该有更惯用(自然)的方式来使用Eloquent来调用这种关系。
宣布"关系的更恰当方式是什么?在http://example.com/?search_string=kittens
?
答案 0 :(得分:0)
您可以针对这种情况使用“查询范围”。我会为此使用“本地范围”。请在此处阅读:https://laravel.com/docs/5.4/eloquent#query-scopes