Reputation: 4808
I am building a dynamic query in eloquent. i matching patterns if pattern doesnt match then i want WHERE 1
. Basically my question is how to write WHERE 1
in eloquent
if (preg_match('/pattern/', $request->input('user_search'))) {
$filter="'email','{$request->input('user_search')}'";
} elseif (preg_match('/pattern/', $request->input('user_search'))) {
$filter="'mobile','{$request->input('user_search')}'";
} elseif (preg_match('/pattern/', $request->input('user_search'))) {
$filter="'name','like','%{$request->input('user_search')}%'";
} else {
$filter=' I want WHERE 1 here';
The question how to write WHERE 1
}
$user = User::where($filter)->orderBy('created_at', 'DESC')->paginate(50);
Upvotes: 0
Views: 292
Reputation: 50491
Since you want to define what is passed to where
in one statement and not using multiple variables for the arguments, you can use an array:
if (preg_match('/pattern/', $request->input('user_search'))) {
$filter = [['email', $request->input('user_search')]];
} elseif (preg_match('/pattern/', $request->input('user_search'))) {
$filter = [['mobile', $request->input('user_search')]];
} elseif (preg_match('/pattern/', $request->input('user_search'))) {
$filter = [['name', 'like', '%'. $request->input('user_search') .'%']];
} else {
$filter = [];
}
$users = User::where($filter)->orderBy('created_at', 'DESC')->paginate(50);
If you pass an empty array to where
it does not add a WHERE
condition.
Upvotes: 1