php - 如何获得关系而不是所有关系的结果
问题描述
我需要一个与项目有“hasMany”关系的订单(表订单)。我只需要获取在其中一个项目上具有特定日期的订单,并且只需要相关项目。
例如,如果我有一个订单:订单 1 有 2 个项目,一个在 1 月 1 日创建,另一个在 12 月创建,我在 1 月 1 日搜索,我想获取订单和项目。
$order = Order::with('items')->whereHas(
'items', function ($query) use ($dateFrom, $dateTo) {
return $query->whereBetween('date_debut', [$dateFrom->format('Y-m-d').' 00:00:00', $dateTo->format('Y-m-d').' 00:00:00'])
->with([
'titles.title',
]);
})->get();
使用该代码,我总能得到订单的所有物品,而不仅仅是我想要的
解决方案
与里面 whereHas 没有任何影响。
您应该将您的条件应用于急切负载关系本身:
$orders = Order::with(['items'=>function($query) use ($dateFrom, $dateTo){
return $query->whereBetween('date_debut', [$dateFrom->format('Y-m-d').' 00:00:00', $dateTo->format('Y-m-d').' 00:00:00'])
->with(['titles.title']);
}])->whereHas(
'items', function ($query) use ($dateFrom, $dateTo) {
$query->whereBetween('date_debut', [$dateFrom->format('Y-m-d').' 00:00:00', $dateTo->format('Y-m-d').' 00:00:00']);
})->get();
请注意,如果您想要所有订单,无论它们是否有项目wherebetween
,您都可以删除这些whereHas
语句。
推荐阅读
- facebook - 用户登录后如何从 Facebook 获取 Graph API 中的用户好友权限
- java - 如何编写 XPath 以从 Java 中的“名称空间 XML”中获取节点属性值
- html - github的页脚位置问题
- javascript - Angular 8 - 使用 jsPdf 生成 PDF
- javascript - mysql安装后无法解析fs、net、tls
- php - 通过字符串键获取数组值
- angular - 从 ECS 实例调用服务发现端点 [nginx, angular, express]
- python - 如何使用所有已安装的模块升级 python 主要版本(例如 3.5 到 3.8)?
- kubernetes - 删除 Azure Kubernetes 服务中的 gzip 编码
- batch-file - 如何使用命令批处理脚本删除特定开头字符的文件?