laravel根据表单中的多个字段创建一个带有查询的规则

问题描述 投票:0回答:1

我正在创建一个简单的预订系统,我需要检查该车是否可用。我要创建一个自定义规则,但我有以下问题: 1.我需要将一个参数从表单传递给传递方法:date,time_form,time_to,car_id。第一个和第二个问题很兴奋,因为; 2.如果我必须在几个输入中使用它,我不知道在控制器中如何以及在何处调用该方法。 我想我需要创建一个查询来检查汽车是否存在。在纯PHP我创建查询,但我不确定我的“laravel”风格查询在上帝:

$result = Reservation::where(function ($query) use ($request) {
            $query->whereBetween('time_from', [$request->input('time_from), $request->input('time_to')])
                ->orWhereBetween('time_to', [$request->input('time_from'), $request->input('time_to')]);
               })->where(function ($query) use ($request) {$query
            ->whereBetween($request->input('time_from'), ['time_from','time_to'])
            ->orWhereBetween($request->input('time_to'), ['time_from','time_to']);
               })
            ->where('date',$request->input('date'))
            ->where('car_id',$request->input('car_id'));

和纯PHP

$sql1 = "select * from reservation 
        where ('$time_from' BETWEEN time_from AND time_to or '$time_to' BETWEEN time_from AND time_to) 
        and (time_from BETWEEN '$time_from' AND '$time_to' or time_to BETWEEN '$time_from' AND '$time_to')              
        and car_id = '$car_id'";

我是laravel的新手所以我要求你理解。我在寻求一些建议。也许是一些更好的方法来做到这一点。

php mysql laravel-5.8
1个回答
0
投票

您可以尝试以下代码:

$result = Reservation::query()
    ->where(function ($query) use ($request) {
        return $query
            ->whereBetween('time_from', [$request->input('time_from'), $request->input('time_to')])
            ->orWhereBetween('time_to', [$request->input('time_from'), $request->input('time_to')]);
    })
    ->where(function ($query) use ($request) {
        return $query
            ->whereRaw($request->input('time_from') . ' BETWEEN time_from AND time_to')
            ->orWhereRaw($request->input('time_to') . ' BETWEEN time_from AND time_to');
    })
    ->where('date', $request->input('date'))
    ->where('car_id', $request->input('car_id'));
© www.soinside.com 2019 - 2024. All rights reserved.