2010-11-09 5 views
12

J'essaie de convertir une instruction where "supérieure à" en la syntaxe Active Record de CI. Lorsque j'utilise cet extraitCodeigniter Enregistrement actif: supérieur à l'instruction

$this->db->join('product_stocks', "product_stocks.size_id_fk = product_attributes.id", "left"); 
    $this->db->where('product_stocks.stock_level', '> 1');  
    $result = $this->db->get('product_attributes')->result_array(); 

Ensuite, imprimez $ this-> db-> last_query(); montre WHERE product_stocks . stock_level = '> 1' ce qui n'est bien sûr pas correct. Cela peut-il être fait?

Répondre

52

Je pense que cela devrait faire l'affaire:

$this->db->where('product_stocks.stock_level >', '1'); //moved the > 
0

je voudrais avoir dans CI les éléments suivants:

$sQuery = "SELECT auftrag, saal, DATE_FORMAT(konzertdatum,'%e, %M, %Y') AS konzertdatum2 FROM auftrag 
    JOIN saal on auftrag.saal_id = saal.id 
    WHERE konzertdatum < NOW() + INTERVAL 240 DAY AND auftrag like '%$sWord%' order by konzertdatum asc LIMIT 4"; 
$aOrder = $this->db->query($sQuery); 
$aOrder = $aOrder->result(); 

Il fonctionne très bien sans CI, mais quand je l'utilise

 $this->db->select("auftrag, saal, DATE_FORMAT(konzertdatum,'%e, %M, %Y') AS konzertdatum2", false); 
    $this->db->from('auftrag'); 
    $this->db->join('saal', 'auftrag.saal_id = saal.id'); 
    $this->db->like('auftrag', $sWord); 
    $this->db->where('konzertdatum <', 'NOW() + Interval 240 day'); 

    $this->db->order_by('konzertdatum'); 
    $this->db->limit(4); 

    $oQuery = $this->db->get(); 

    $aOrder = $oQuery->result(); 
    print_r($this->db->last_query()); 

il retourne tous les résultats ne se soucient pas de la où (bien que le sql semble bien):

SELECT auftrag, saal, DATE_FORMAT(konzertdatum, '%e, %M, %Y') AS konzertdatum2 FROM (`auftrag`) JOIN `saal` ON `auftrag`.`saal_id` = `saal`.`id` WHERE `konzertdatum` < 'NOW() + Interval 240 day' AND `auftrag` LIKE '%spangenberg%' ORDER BY `konzertdatum` LIMIT 4 
2

Vous pouvez également passer une fonction paramètre de chaîne à l'endroit où() comme celui-ci,

$this->db->where('product_stocks.stock_level > 1'); 
4

Soit

$this->db->where('product_stocks.stock_level >', '1');
ou
$this->db->where(array('product_stocks.stock_level >'=>'1'));
devrait le faire. Notez l'espace entre le nom du champ et l'opérateur; sinon, vous obtiendrez l'erreur 1064.

Questions connexes