php - 查询关系并根据关系查询得到结果
问题描述
我想做一个查询来获取模型的关系,并通过在我的关系中完成的查询对父模型进行排序,如下所示:
$data = Accommodation::with([ 'accommodationRoomsLimited.discount', 'accommodationRoomsLimited', 'accommodationRoomsLimited.roomPricingHistorySearch' => function ($query) use ($from_date, $to_date) {
$query->whereDate('from_date', '<=', $from_date);
$query->whereDate('to_date', '>=', $to_date);
}])->when($bed_count, function ($q, $bed_count) {
$q->with([
'accommodationRoomsLimited' => function ($q) use ($bed_count) {
$q->where('bed_count', $bed_count);
}
]);
因此,当用户为 i 发送 bed_count 3 时,此查询仅显示 bed_count 为 3 的房间,如果不是,则显示住宿但空房间对象为关系。我希望我的结果是这样的,如果房间没有 3 的 bed_count,它自己不会在结果中显示住宿。我怎样才能做到这一点?谢谢 。
解决方案
也许如果你使用whereHas
而不是with
,你可以这样做:
$data = Accommodation::with([ 'accommodationRoomsLimited.discount', 'accommodationRoomsLimited', 'accommodationRoomsLimited.roomPricingHistorySearch' => function ($query) use ($from_date, $to_date) {
$query->whereDate('from_date', '<=', $from_date);
$query->whereDate('to_date', '>=', $to_date);
}])->when($bed_count, function ($q, $bed_count) {
$q->whereHas('accommodationRoomsLimited', function($query) use ($bed_count) {
$query->where('bed_count', $bed_count);
});
更新
if ($bed_count !== null) {
$data = Accommodation::whereHas('accommodationRoomsLimited', function($query) use ($bed_count) {
$query->where('bed_count', $bed_count);
})->with(['accommodationRoomsLimited.discount', 'accommodationRoomsLimited', 'accommodationRoomsLimited.roomPricingHistorySearch' => function ($query) use ($from_date, $to_date) {
$query->whereDate('from_date', '<=', $from_date);
$query->whereDate('to_date', '>=', $to_date);
}])->get();
} else {
$data = Accommodation::with([ 'accommodationRoomsLimited.discount', 'accommodationRoomsLimited', 'accommodationRoomsLimited.roomPricingHistorySearch' => function ($query) use ($from_date, $to_date) {
$query->whereDate('from_date', '<=', $from_date);
$query->whereDate('to_date', '>=', $to_date);
}])->get();
}
希望能帮助到你。
推荐阅读
- java - CompletableFuture 在 forloop 中被创建和等待
- gradle - DefaultSourceDirectorySet 构造函数已被弃用。如何使用 ObjectFactory 服务?
- javascript - 如何使用 lodash 对嵌套数组进行排序
- javascript - 用 contenteditable 中的链接替换文本
- c++ - C++ - 按降序排序数组不起作用
- javascript - 异步和承诺的困境
- powerbi - 测量以计算平均值
- python - 使用来自 Consumer 类外部的 Django Channels 发送消息
- php - 在链配置的命名空间中找不到类“App\Document\User”
- c# - 时间:2019-05-10 标签:c#htmlagilitypack,Page not Found