So, I can use User::where('username', '!=', null)->get();
However, I am in a case where I want to chain queries using if conditions starting from the first one, and where('username', '!=', null) is unnecessary in this case. Let me give a pseudo example:
I am running a report based on Users where there are several fields. I want to initialize the query builder like this, and chain queries using if statements.
$user = User::class(); // I know I can't use this line, however you'll get the idea.
if (isset($gender)) {
$user = $user->where('gender', $gender);
}
if (isset($age)) {
$user = $user->where('age', $age);
}
$users = $user->get()
Is the only way starting the query (in the first line) with:
$user = User::where('username', '!=', null)
You're looking for
$userQuery = User::query();
Then, tack on some additional clauses:
$userQuery->where(...);
Then, provide a closure (->first(), ->get(), etc) to get your users:
$users = $userQuery->get();
You could instantiate your object like :
$user = (new User);
NOTE: However it will be better to use when() instead of the if statements.
$users = User::when($gender, function ($query, $gender) {
$query->where('gender', $gender);
})
->when($age, function ($query, $age) {
$query->where('age', $age);
})
->get();
If the variables are not initialized you could use isset() method like :
$users = User::when( isset($gender), function ($query, $gender) {
$query->where('gender', $gender);
})
->when( isset($age), function ($query, $age) {
$query->where('age', $age);
})
->get();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With