Где предложение с несколькими значениями в Laravel 5.7 - PullRequest
2 голосов
/ 25 июня 2019

Я пытаюсь составить отчет для системы автобусного транспорта, форма отчета имеет поля «Драйвер» и «Маршрут». Он работает нормально, когда я выбираю «Драйвер», чтобы получить отчет, или выбираю только «Маршрут», чтобы получить отчет, но что-то не так, когда я выбираю «Драйвер и Маршрут». Любая помощь будет оценена

Посмотреть / Форма

<form action="" method="get">
    <div class="row">
        <div class="col-md-3 form-group">
            <label>From Date:</label>
            <input type="date" name="start" class="form-control">
        </div>
        <div class="col-md-3 form-group">
            <label>To Date:</label>
            <input type="date" name="end" class="form-control">
        </div>
    </div>
    <div class="row">
        <div class="col-md-3" id="route_content">
            <label>Route</label>
            <select name="routeid" id="route_id" class="js-example-placeholder-singleuserid js-states form-control"
                    style="width: 100%; height:40px;">
                <option></option>
                <?php foreach ($routes as $key => $value): ?>
                <option value="{{$value->id}}">{{$value->from}} -> {{$value->to}}</option>
                <?php endforeach ?>
            </select>
        </div>
        <div class="col-md-3" id="driver_content" z>
            <label>Driver</label>
            <select name="driverid" id="driver_id" class="js-example-placeholder-single js-states form-control"
                    style="width: 100%; height:40px;">
                <option></option>
                <?php foreach ($driver as $key => $value): ?>
                <option value="{{$value->id}}"> {{$value->name}} </option>
                <?php endforeach ?>
            </select>
        </div>
    </div>
    <div class="row">
        <div class="col-md-3 form-group">
            <button class="btn btn-info btn-md" style="margin-top: 27px;">Search</button>
        </div>
    </div>
</form>

Маршрут

 Route::get('post_genral_report/{start?}/{end?}' , 
'reportController@post_genral_report')->name('abd');

Контроллер

public function post_genral_report(Request $request, $start = null, $end = null)
{
    $data = DB::table('registration_tickets')
        ->join('trips', 'trips.id', 'registration_tickets.trip_id')
        ->join('buses', 'buses.id', 'trips.bus_id')
        ->join('drivers', 'drivers.id', 'trips.driver_id')
        ->join('routes', 'routes.id', 'trips.route_id')
        ->join('provinces as p1', 'p1.id', 'routes.from')
        ->join('provinces as p2', 'p2.id', 'routes.to')
        ->select('registration_tickets.*', 'p1.name as from', 'p2.name as to', 'buses.type', 'buses.plate',
            'drivers.name as d_name', 'drivers.lastname as lname');

    if ($start and $end) {
        $data->whereBetween('registration_tickets.date', [
            $start,
            $end
        ]);
    }

    if ($request->driverid) {
        $data->where('trips.driver_id', $request->driverid);
    }

    if ($request->routeid) {
        $data->where('trips.route_id', $request->routeid);

    }

    if ($request->driverid and $request->routeid) {
        $data->where([
            'trips.driver_id', '=', $request->driverid,
            'trips.route_id', '=', $request->routeid
        ]);
    }

    $data = $data->get();

    return Datatables::of($data)->make(true);
}

1 Ответ

2 голосов
/ 25 июня 2019

Вам необходимо изменить часть, в которой вы используете и driver_id, и route_id, чтобы достичь своей цели (поскольку, согласно вашему коду, кажется, что вы хотите получить результаты, когда оба параметра route_id или driver_id попадают между начальной и конечной датой тем не менее, ваш код проверяет driver_id и route_id по отдельности на условие «где». Вам нужно обернуть их в «где» и использовать вложенные «где» в нем):

if ($request->driverid and $request->routeid) {
    $data->where(function($q) use ($request)
    {
        $q->where('trips.driver_id', '=', $request->driverid)
        ->where('trips.route_id', '=', $request->routeid);
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...