在Eloquent

时间:2017-07-22 04:56:21

标签: php laravel eloquent

我正在尝试使用数据透视表在两个模型之间创建关系。这是基本结构。

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

使用belongsToManyid不是一个选项。这是因为当使用这些关系助手时,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

1 个答案:

答案 0 :(得分:0)

您可以针对这种情况使用“查询范围”。我会为此使用“本地范围”。请在此处阅读:https://laravel.com/docs/5.4/eloquent#query-scopes