web-dev-qa-db-fra.com

Laravel: dynamique où clause avec Eloquent

J'appelle une URL avec des paramètres de recherche dynamiques. Comment pourrais-je former une requête appropriée Eloquent ?

En théorie:

  1. question
  2. requête where (someParam1)
  3. requête where (someParam2)
  4. requête orderby (someParam3)
  5. requête get

J'ai besoin de ce type de structure pour pouvoir utiliser la clause where si param existe . S'il existe un autre moyen à Laravel, veuillez me le faire savoir.

21
be-codified

C'est facile avec Laravel. Faites juste quelque chose comme ça:

$query = User::query();

if ($this == $that) {
  $query = $query->where('this', 'that');
}

if ($this == $another_thing) {
  $query = $query->where('this', 'another_thing');
}

if ($this == $yet_another_thing) {
  $query = $query->orderBy('this');
}

$results = $query->get();
58
BakerStreetSystems
You can use like this

$validateUserDetail = User::query();
if (!empty($userDetails['email'])) {
    $validateUserDetail->whereemail($userDetails['email']);
}if (!empty($userDetails['cellphone'])) {
    $validateUserDetail->wherecellphone($userDetails['cellphone']);
}
$validateUserDetail->select('username');
$validateUserDetail->get()
1
Nishabh Mistry

Je suis venu ici de Google. Si vous allez parcourir plus de 5 instructions if, il est plus efficace d'utiliser une instruction switch

 if(empty($request->except('_token')))
        return 'false';

    $models = Vehicle::query();
    $request_query = $request->all();
    $year_switch = false;

    foreach ($request_query as $key => $field_value){



        if($field_value != 'any'){                
            switch($field_value){
                case 'X':                                            
                case 'Y':
                    $year_switch = true; 
                break;
                case'Z':
                    //Dynamic
                    $models->where($key,'LIKE', $field_value);
                break;

            }                    
        }
    }
0
CTully12

Vous pouvez passer la valeur dynamique par exemple ci-dessous

$user_auctions = $this->with('userAuctions')
                ->where('users.id', '=', $id)
                ->get();
0
Nikunj K.