intelis
intelis

Reputation: 8058

Good way to filter multiple DB columns in Laravel

I want to filter my results agains multiple DB columns but the way I'm doing it right now doesn't seem Laravel-ish at all :)

Is there a better way? I don't want to pile up all those sql statements at the end.

$data = Input::except('_token');

        if (isset($data['passenger_name']))
        {
            $passenger_name = $data['passenger_name'];
        } else {
            $passenger_name = '*';
        }

        if (isset($data['passenger_lastname']))
        {
            $passenger_lastname = $data['passenger_lastname'];
        } else {
            $passenger_lastname = '*';
        }

        // Run query
        $q = Reservation::where('passenger_firstname', 'LIKE', '%'. $passenger_name .'%')
                        ->where('passenger_lastname', 'LIKE', '%' . $passenger_lastname .'%')
                        ->get();

        return View::make('dashboard')->with('reservations', $q);


These are just two of many criteria i have to run queries against

Upvotes: 0

Views: 4338

Answers (1)

The Alpha
The Alpha

Reputation: 146201

You may try this:

$query = Reservation::query();
if(Input::has('passenger_name')) {
    $query->where('passenger_name', Input::get('passenger_name'));
}
if(Input::has('passenger_lastname')) {
    $query->where('passenger_lastname', Input::get('passenger_lastname'));
}
$reservations = $query->get();
return View::make('dashboard')->with('reservations', $reservations);

Upvotes: 1

Related Questions