【问题标题】:Laravel Eloquent query build select min valueLaravel Eloquent 查询构建选择最小值
【发布时间】:2017-12-20 14:25:55
【问题描述】:

我有以下查询(已修整)来列出供用户预订的房间:

$buildquery=Room::

        with(['hotel' => function ($query) {
            $query->where('status', 0);
        }])

        ->with('image')->with('amenities');

        if ($request->filled('location_id')) {
            $buildquery->Where('city', $request->location_id);
        }

        $buildquery->Where('astatus', 1)->Where('status', 0);

        $rooms = $buildquery->simplePaginate(20);

实际查询(未修剪):

select `rooms`.*, 
(select count(*) from `amenities` inner join `amenities_room` on `amenities`.`id` = `amenities_room`.`amenities_id` where `rooms`.`id` = `amenities_room`.`room_id` and `amenities_id` in (?)) as `amenities_count` 
from 
`rooms` 
where `city` = ? and `price` between ? and ? and `astatus` = ? and `status` = ? having 
`amenities_count` = ? 
limit 21 offset 100

它列出了酒店中所有可用的房间。我只需要为最低价格的一家酒店选择一间客房。

【问题讨论】:

    标签: php mysql eloquent laravel-5.5


    【解决方案1】:

    你可以use order by

    $buildquery->orderBy('COL_NAME', 'DESC')->get();
    

    如果你只需要一个,你可以使用take(1)

    【讨论】:

    • 您的查询总共只给出一个结果。注意:我有很多酒店(每个酒店都有很多房间)
    • 如果我理解正确的话。您想要为您拥有的每家酒店提供最低价格的客房。比从酒店模型建立关系并像Hotel::with('room' => function($query) { $query->orderBy('price', 'asc')->first(); }]) ->get();这样的查询更好
    • 嗯也这么想。但是所有已经与房间建立的关系,如(设施、房间类型、图像)和位置字段,仅在房间中可用
    【解决方案2】:
    Hotel::with('room' => function($query) {
        $query->orderBy('price', 'asc')->first();
    },
    'room.images',
    'room.roomTypes',
    'room.amenities'])
    ->get();
    

    你可以做这样的事情来得到这样的结构:

    {
        'Hotel': {
            'Room': {
                'Images': {
                    //
                },
                'roomTypes': {
                    //
                },
                'amenities': {
                    //
                }
            }
        }
    }
    

    这是你想要的吗?

    【讨论】:

    • 看起来很有希望,让我试试吧
    • 错过方括号,抱歉。酒店::with(['room' => function($query) {
    • 上述查询部分有效,我有这个便利设施过滤器:如果选择便利设施,我将添加这个查询,if($request->filled('amenities')){ $amenities = $request- >设施; $count = count($amenities); $buildquery->withCount(['amenities' => function($query) 使用 ($amenities){ $query->whereIn('amenities_id', $amenities); }]) ->having('amenities_count', $count ); } 如何将这个添加到上面的查询中?
    • 如果你有时间看看这个 (stackoverflow.com/questions/47919059/…)
    猜你喜欢
    • 2021-08-17
    • 2020-03-19
    • 2018-10-27
    • 2016-03-30
    • 2016-02-09
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    • 2015-01-24
    相关资源
    最近更新 更多