雄辩多才多艺

时间:2013-12-16 00:46:35

标签: php database-design laravel eloquent

使用Laravel,我在访问其他表时遇到了一些问题,这些表都是多对多的。

enter image description here

所以基本上,我从用户ID开始,并希望列出用户拥有的客户。

public function customers()
{
    return $this->belongsToMany('Customer', 'user_to_customer');
}

这可行,假设我的用户ID为1:

User::find(1)->customers;

但是现在我想说,对于这些客户中的每一位,都要列出他们的产品。但是,这需要在同一个结果中。

我想我会在Customer模型中需要一些东西,例如:

public function products()
{
    return $this->belongsToMany('Product', 'user_to_customer');
}

我似乎无法弄清楚如何在同一个查询中访问它?类似的东西:

User::find(1)->customers->products;

不确定..有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您可以查看eager loading来完成此行为。鉴于以下模型关系:

class User extends Eloquent {

    public function customers()
    {
        return $this->has_many( 'Customer' );
    }

}

class Customer extends Eloquent {

    public function products()
    {
        return $this->has_many( 'Product' );
    }

}

class Product extends Eloquent {}

以下查询将返回属于特定(在本例中为第一个)用户的客户的所有产品:

User::with(array('customers', 'customers.products'))->first();