我试图获得与Laravel hasManyThrough
相似的内容,但我不确定我的数据库设置是否合适,或者我只是遗漏了某些东西
我正在尝试显示管理员页面,以显示我们支持的所有网站。我想有一个简单的列,显示每个站点附加了多少客户的明确计数。为此,我将浏览orders
表并检索distinct
用户列表,然后在我的视图中使用->count()
方法。
这是我的数据库设置(简化):
sites
表(主键:' id'):
id | ...
users
表(主键:' id'):
id | first_name | last_name | ...
orders
表(主键:'顺序'):
id | order | user_id | site_id | ....
Site
型号:
public function customers()
{
return $this->hasManyThrough('App\User', 'App\Order', 'site_id', ' id')->distinct();
}
我立刻意识到我的数据库设置和文档之间的关键区别是我的order_id
表格中没有users
,但我做的没有意义因为用户可以有很多订单。
值得注意的是:我还有一张表user_orders
。我不确定我是否应该使用它。 user_orders
具有以下设置:
id | user_id | order
你可以看到它只是一个中间表来保持用户和订单之间的连接(记住order
是订单中的PK,而不是id。)
那么,任何人都可以帮助我理解我做错了吗?
答案 0 :(得分:0)
你可以通过加入逃脱。我给你这个示例代码来指导你
public function customers()
{
return $this->hasMany('App\Order')
->leftjoin('users', 'users.id', 'orders.user_id')
->groupBy('users.id'); //Is this needed?
//Above code will return you a collection of Order though, but with the user data.
//Let's try using the User model
return App\User::whereHas('orders', function($query) use ($this->id) {
$query->where('site_id', $this->id);
})->get();
}