lilnoobcoder
lilnoobcoder

Reputation: 85

Laravel limit query param results

i have a query which filters films based upon the input by the user, i am needing to add a limit as a query parameter so it limits the amount of films that are returned, how do i add this in, i am new to writing eloquent queries.

query

$films = Film
::when($request->input('first'), function ($query, $first) {
    $query->whereHas('options', function ($query) use ($first) {
        $query->where('first', $main);
    });
})
->when($request->input('second'), function ($query, $second) {
    $query->whereHas('options', function ($query) use ($second) {
        $query->where('second', $second );
    });
})
->when($request->input('age'), function ($query, $age) {
    $query->whereHas('ageRatings', function ($query) use ($age) {
        $query->where('age', $age);
    });
})
->when($request->input('country'), function ($query, $country) {
    $query->whereHas('locations', function ($query) use ($country) {
        $query->where('country', $country);
    });
})
->when($request->input('city'), function ($query, $city) {
    $query->whereHas('locations', function ($query) use ($city) {
        $query->where('city', $city);
    });
})
->get();

Upvotes: 0

Views: 1244

Answers (2)

Qonvex620
Qonvex620

Reputation: 3972

You can use both of these method

the Limit method

$limit = 10;
$films = Film
::when($request->input('first'), function ($query, $first) {
    $query->whereHas('options', function ($query) use ($first) {
        $query->where('first', $first);
    });
})
->when($request->input('second'), function ($query, $second) {
    $query->whereHas(‘options', function ($query) use ($second) {
        $query->where('second', $second);
    });
})
->when($request->input('age'), function ($query, $age) {
    $query->whereHas('ageRatings', function ($query) use ($age) {
        $query->where('age', $age);
    });
})
->when($request->input('country'), function ($query, $country) {
    $query->whereHas('locations', function ($query) use ($country) {
        $query->where('country', $country);
    });
})
->when($request->input('city'), function ($query, $city) {
    $query->whereHas('locations', function ($query) use ($city) {
        $query->where('city', $city);
    });
})
->limit($limit)
->get();

the Take method

$limit = 10;
    $films = Film
    ::when($request->input('first'), function ($query, $first) {
        $query->whereHas('options', function ($query) use ($first) {
            $query->where('first', $first);
        });
    })
    ->when($request->input('second'), function ($query, $second) {
        $query->whereHas('options', function ($query) use ($second) {
            $query->where('second', $second);
        });
    })
    ->when($request->input('age'), function ($query, $age) {
        $query->whereHas('ageRatings', function ($query) use ($age) {
            $query->where('age', $age);
        });
    })
    ->when($request->input('country'), function ($query, $country) {
        $query->whereHas('locations', function ($query) use ($country) {
            $query->where('country', $country);
        });
    })
    ->when($request->input('city'), function ($query, $city) {
        $query->whereHas('locations', function ($query) use ($city) {
            $query->where('city', $city);
        });
    })
    ->take($limit)
    ->get();

Upvotes: 0

Patrick Schocke
Patrick Schocke

Reputation: 1491

You can use $query->limit(5) or $query->take(5).

If you want to skip the first 5 results, use $query->skip(5)

If you want to add pagination, you can use $query->paginate(5)

See More: Query Builder

Upvotes: 1

Related Questions