Home > Software design >  Laravel Eloquent get, how to add a optional query based on one column value?
Laravel Eloquent get, how to add a optional query based on one column value?

Time:02-01

How to filter queries based on a column from the records? Suppose I have a column of types (0/1/2) in the users table. How to get it working like this?

$users = User::where(.. , ..)
  ->somethingXYZ({ 
         if ($user->type === 1) {
            $users->whereIn(.. , ..);
    } elseif ($user->type === 2) {
            $users->whereNotIn(.. , ,,);
     }})->latest()->get();

I know I'm not making sense but I don't know how should I ask. If anyone can help me, I will be grateful.

CodePudding user response:

Are you looking for something like this ?

$query = User::where();

$query->when(request('type') == 1, function ($q) {
    return $q->where('type',1);
});
$query->when(request('type') == 2, function ($q) {
    return $q->where('type', 2);
});

$users = $query->get();

CodePudding user response:

$query = User::query();

$query->where('type', '=', $user->type);
if($user->type == 1 ) {
$query->where('column_1', '=', 'some value');
$query->whereIn('column_2', $someArray);
// ...
}
if($user->type == 2 ) {
$query->where('column_1', '!=', 'some value');
$query->whereNoIn('column_3', $someArray);
// ...
}

$users = $query->latest()->get();
  •  Tags:  
  • Related