2012-01-05 28 views
8

¿Es posible grupo y? Where/or_where/or_like ... declaraciones juntas para no mezclar con otras declaraciones/where.Codeigniter Registro activo 'where_or' agrupando

Algo que resultaría en

DONDE ciudad = 'Mi ciudad' y el estado = 'Mi Estado' Y (nombre como% nombre1% O nombre como% nombre2%)

Respuesta

11

Sí. $this->db->where() le permite escribir cláusulas manualmente. Usted puede hacer esto:

$this->db->where('city', 'My City'); 
$this->db->where('state', 'My State'); 
$this->db->where('(name LIKE %name1% OR name LIKE %name2%)', null, false); 

Ajuste del tercer parámetro de falsas previene CodeIgniter de intentar añadir acentos abiertos a la cláusula.

Echa un vistazo a Active Record documentation. La sección titulada $ this-> db-> where(); explica los cuatro métodos que puede usar para establecer WHERE cláusulas.

+0

impresionante, faltaba el tercer parámetro cuando intenté esto – kilrizzy

13

Sé que esto es un poco tarde, pero encontré esta publicación al buscarlo y encontré una solución mejor que la propuesta por Sean.

$name = 'Bob'; 

$this->db->where('city', 'My City'); 
$this->db->where('state', 'My State'); 
$this->db->group_start(); 
    $this->db->like('name', $name); 
    $this->db->or_like('name', $name); 
$this->db->group_end(); 
+3

Esta solución es para CodeIgniter 3+ pero no para CodeIgniter 2 – semsem

0

Estas dos funciones group_start() y group_end() se han implementado en CodeIgniter 3.0.3. Aquí hay una implementación mejor según la pregunta original.

$name1 = 'Bob'; 
$name2 = 'John'; 

$this->db->where('city', 'My City'); 
$this->db->where('state', 'My State'); 
$this->db->group_start(); 
$this->db->like('name', $name1); 
$this->db->or_like(('name', $name2); 
$this->db->group_end(); 
Cuestiones relacionadas