试图实现hasManyThrough类型关系

时间:2017-03-21 15:47:50

标签: laravel laravel-5 eloquent

我试图获得与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。)

那么,任何人都可以帮助我理解我做错了吗?

1 个答案:

答案 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();
}