php - 如何在 with() 方法中使用关系?
问题描述
这是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();
给我所有的 purchase_order 以及他们的商品。commodities->invoiced()->get();
给我所有发票商品。
鞠躬我需要得到所有的 purchase_order 以及他们的发票商品。我怎样才能做到这一点?
它们都不起作用:
purchase_order::with(commodities::invoiced())->get();
purchase_order::commodities()->invoiced()->get();
解决方案
检查文档的约束急切负载部分:
约束急切负载
有时您可能希望预先加载关系,但也为预先加载查询指定额外的查询约束。这是一个例子:
$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();
推荐阅读
- arrays - Google GeoChart(Lavacharts 库)-> AddRow / AddRows 未在地图上呈现任何结果,尽管创建了值数组
- git - 执行 git apply 时出现错误“删除 1 个前导路径名组件时 git diff 标头缺少文件名信息”
- azure-active-directory - OIDC 应用程序日志记录
- html - 我可以在媒体查询中包含和排除 html 文本吗?
- javascript - 如何限制“FileUploadBox()”按钮的数量?
- c# - 只使用一份请愿书而不是多份
- node.js - 使用猫鼬将上传的图像名称保存在数组中
- javascript - 如何根据用户输入计算多个地点的旅程燃油价格
- sql-server - 触发器存在但未显示在服务器对象、数据库触发器或表下的触发器文件夹中
- jhipster - 由于 CloudFoundry 激活了云配置文件,jHipster App 正常崩溃