2010-06-21 6 views
1

Je vais avoir quelques problèmes pour trouver CodeIgniter dossier actif pour produire une requête comme ceci:Comment écrire une requête dans CodeIgniter active Enregistrement

SELECT fruits.* FROM fruits 
WHERE fruits.color = 'red' 
AND (fruits.size = 'medium' OR fruits.name = 'kiwi' OR fruits.length = 7); 

Fondamentalement, je veux avoir plusieurs ou clauses, mais une clause where qui est toujours appliqué.

$this->db->select('fruits.*'); 
$this->db->from('fruits'); 
$this->db->where('fruits.color', 'red'); 
$this->db->or_where('fruits.size', 'medium'); 
$this->db->or_where('fruits.name', 'kiwi'); 
$this->db->or_where('fruits.length', 7); 

produit quelque chose comme:

SELECT fruits.* FROM fruits WHERE fruits.color = 'red' OR fruits.size = 'medium' OR fruits.name = 'kiwi' OR fruits.length = 7;

J'ai besoin de faire respecter cette couleur est toujours rouge.

Existe-t-il un moyen décent de le faire?

Répondre

0

Il n'y a aucun moyen d'y parvenir correctement en utilisant CodeIgniter Active Record.

La seule façon qui n'est pas trop moche avec une chaîne personnalisée avec le où() fonction comme ceci:

$this->db->select('fruits.*'); 
$this->db->from('fruits'); 
$where = "fruits.color = 'red' AND (fruits.size = 'medium' OR fruits.name = 'kiwi' OR fruits.length = 7);"; 
$this->db->where($where); 

IMPORTANT: Notez que l'utilisation d'une chaîne personnalisée, votre variable ne sera pas échappé, donc, vous devez utiliser $ this-> db-> escape()

$this->db->select('fruits.*'); 
$this->db->from('fruits'); 

$color = 'red'; 
$size = 'medium'; 
$name = 'kiwi'; 
$length = 7; 
$where = "fruits.color = '".$this->db->escape($color)."' AND (fruits.size = '".$this->db->escape($size)."' OR fruits.name = '".$this->db->escape($name)."' OR fruits.length = '".$this->db->escape($length)."');"; 
$this->db->where($where); 

Edit:

Je suis confus sur la bonne question, je l'ai corrigé :)

+0

Ouais, ce que je pensais. Malheureusement ma requête actuelle a un tas de ou_where_in plutôt que juste ou_où .... donc si je construis une chaîne personnalisée où je pourrais tout aussi bien écrire toute la requête en SQL brut à ce point:/ Merci pour l'entrée. – Anon

+0

C'était l'un des inconvénients de CodeIgniter, surtout maintenant que j'utilise Yii qui est de la pure OOP, je le remarque encore plus. Sinon, une solution serait de créer votre propre fonction pour gérer cela, ou pour remplacer la classe db. – Weboide

Questions connexes