Dhairya Lakhera
Dhairya Lakhera

Reputation: 4808

Laravel eloquent dynamic query with where 1

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

Answers (1)

lagbox
lagbox

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

Related Questions