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