如何在with()方法中使用关系?

时间:2018-07-07 06:38:12

标签: php laravel

这是purchase_order模型:

class purchase_order extends Model
{
    protected $table = "purchase_order";

    public function commodities()
    {
        return $this->hasMany(commodities::class, 'purchase_order_id', 'id');
    }
}

这是commodities模型:

class commodities extends Model
{
    protected $table = "commodities";

    public function scopeInvoiced($query){
        return $query->where('invoiced', 1);
    }

}

  • purchase_order::with('commodities')->get();给了我所有的购买订单以及他们的商品。

  • commodities->invoiced()->get();给了我所有发票商品。

弓我需要连同他们的已开具发票的商品一起获得所有采购订单。我该怎么办?


它们都不起作用:

purchase_order::with(commodities::invoiced())->get();

purchase_order::commodities()->invoiced()->get();

1 个答案:

答案 0 :(得分:3)

查看文档的Constraining Eager Loads部分:

  

约束渴望的负荷

     

有时您可能希望加载一段关系,但也要指定   急切加载查询的其他查询约束。这是一个   例如:

$users = App\User::with(['posts' => function ($query) {
    $query->where('title', 'like', '%first%');
}])->get();
     

在此示例中,Eloquent仅渴望加载帖子所在的位置   标题栏包含单词first。当然,你可以打电话给其他人   查询构建器方法以进一步自定义预加载   操作:

$users = App\User::with(['posts' => function ($query) {
    $query->orderBy('created_at', 'desc');
}])->get();

因此,在此之后,请尝试以下代码:

$purchase_orders = purchase_order::with(['commodities' => function ($query) {
    $query->where('invoiced', 1);
}])->get();