C'est pour une requête de recherche basée sur de nombreux champs d'entrée, je fais si des instructions à l'intérieur de la requête basées sur les entrées, par exemple:
$query = Model::all();
if($field = Input::get("field"))
$query->where("column_name", $field);
mais ce que je veux faire aussi, c'est une condition pour sauter une ligne s'il n'y a pas d'image avec un nom de cet identifiant de ligne, comme ceci:
if( file_exists("/img/".$this_query->id) )
$query->skip();
Réponses:
1 pour la réponse № 1Option 1: consisterait à créer un tableau des noms de fichiers, puis à utiliser le whereIn
méthode du générateur de requêtes, qui vérifie l'occurrence d'une valeur de colonne dans un tableau.
$query = Model::query();
$filenames = scandir("/img");
// the following excludes any id"s not in the $filenames array
$query = $query->whereIn("id", $filenames);
Option 2: exécutez la requête, puis filter
la Collection résultante à Laravel.
$query = Model::query();
// ... then build up your query
// the following gets the query results and then filters them out
$collection = $query->get()->filter( function($item) {
return file_exists("/img/".$item->id);
}
Raisonnement: la base de données ne peut pas vérifier le système de fichiers pendant son traitement; vous devez donc (Option 1) lui fournir une liste à partir de laquelle vérifier, ou (Option 2) faire la vérification après toi get()
les résultats de la requête.