Eloquent有很多过滤器和急切加载

时间:2017-10-25 14:07:48

标签: laravel eloquent

我正在使用Laravel创建一个应用程序,而我正试图与Eloquent合作。我有两个表:订单和物品。

每个项目都有一个类型(int数据):

  • 1 =>书
  • 2 =>视频

每个订单都有一本书和很多视频。

在我的订单模型中,我希望有一本书和其他项目的关系。所以,我有这个代码:

public function book()
{
    return $this->hasMany('App\Item')->where('type', 1)->first();
}

public function others()
{
    return $this->hasMany('App\Item')->where('type', '!=', 1)->get();
}

但是,如果我使用我的关系急切加载,我收到一个错误:

Order::with(['book', 'others'])->get();

你能帮我解决这个问题吗?

由于

1 个答案:

答案 0 :(得分:0)

定义这样的关系以使代码有效:

public function book()
{
    return $this->hasOne('App\Item')->where('type', 1);
}

public function others()
{
    return $this->hasMany('App\Item')->where('type', '!=', 1);
}

但是,在没有where约束的情况下定义关系会更好:

public function book()
{
    return $this->hasOne('App\Item');
}

public function others()
{
    return $this->hasMany('App\Item');
}

然后这样做:

Order::with(['book' => function ($q) {
        $q->where('type', 1);
    },
    'others' => function ($q) {
        $q->where('type', '!=', 1);
    }])
    ->get();