Laravel Eloquent出售产品 - 客户关系

时间:2013-11-22 17:08:12

标签: php laravel laravel-4 eloquent eager-loading

因此,使用 Laravel 4 ,我有一个销售表,与产品表有很多关系,而且还有与客户表格的一对多关系。

我按如下方式设置模型:

class Sale extends Eloquent {
...
    public function products(){
        return $this->belongsToMany('Product');
    }
    public function customers(){
        return $this->belongsTo('Customer');
    }
}

class Product extends Eloquent {
...
    public function sales(){
        return $this->belongsToMany('Sale');
    }
}

class Customer extends Eloquent {
...
    public function sales(){
    return $this->hasMany('Sale');
    }
}

我想要做的是返回所有销售的数据,包括每笔销售中包含的每种产品的数据以及购买它的客户的数据。

在我的 SalesController 中,我正在使用预先加载来查询我的数据,如下所示:

public function index()
{
    return Sale::with('products', 'customers')->get();
}

它返回带有Sale数据的对象,Product数据,但Customer数据为空。

如何使用Eloquent(或自定义查询)实现此目的?

修改

这是它返回的对象字符串:

[{"id":1,"customer_id":1,"date":"2013-11-21","status":1,"created_at":"0000-00-00 00:00:00","updated_at":"0000-00-00 00:00:00","products":[{"id":1,"name":"Monitor","price":50,"status":1,"created_at":"0000-00-00 00:00:00","updated_at":"0000-00-00 00:00:00","pivot":{"sale_id":1,"product_id":1,"custom_price":25,"order":1}}],"customers":null}]

1 个答案:

答案 0 :(得分:0)

尝试将customers关系更改为单数:

class Sale extends Eloquent {
...
    public function products(){
        return $this->belongsToMany('Product');
    }
    public function customer(){ // <- here
        return $this->belongsTo('Customer');
    }
}

(从评论转到回答)