Clauses WHERE d'enregistrement actif dans Codeigniter : regroupement pour les requêtes complexes
Lors de l'utilisation d'enregistrements actifs dans Codeigniter, vous pouvez rencontrer une situation dans laquelle vous avez besoin pour regrouper les clauses WHERE pour les requêtes complexes. Cela peut être particulièrement utile lors de la génération de requêtes SQL dynamiques basées sur des paramètres d'entrée.
Pour résoudre ce problème dans les versions 3 et 4 de Codeigniter, vous pouvez utiliser les méthodes group_start() et group_end().
Codeigniter 3
$this->db->select() ->from('users') ->where('name !=', 'Joe') ->group_start() // Open bracket ->where('age <', 69) ->or_where('id <', $id) ->group_end(); // Close bracket
Codeigniter 4
$builder->select('*') ->from('users') ->where('name !=', 'Joe') ->groupStart() ->where('age <', 69) ->orWhere('id <', $id) ->groupEnd();
En utilisant ces méthodes, vous pouvez regrouper efficacement les clauses WHERE et garantir la bonne priorité des opérateurs, même lorsque vous utilisez plusieurs clauses OR.
À titre d'exemple, considérons le scénario suivant où vous souhaitez générer dynamiquement une requête basée sur des fourchettes de prix :
if ($price_range) { $price_array = explode('.', $price_range); for ($i = 0; $i < count($price_array); $i++) { if ($i == 0) { $this->db->where('places.price_range', $price_array[$i]); } else { $this->db->or_where('places.price_range', $price_array[$i]); } } }
Dans cet exemple, le problème réside dans l'utilisation de or_where(), ce qui pourrait conduire à des résultats inattendus en raison de la priorité des opérateurs. En utilisant group_start() et group_end(), vous pouvez regrouper les clauses OR et vous assurer qu'elles sont correctement évaluées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!