Codeigniter Active Record 'where_or' группировка - PullRequest
8 голосов
/ 05 января 2012

Можно ли группировать and_where / or_where / or_like ... вместе, чтобы не смешиваться с другими операторами и / where.

ГДЕ город = «Мой город» И штат = «Мой штат» И (имя LIKE% name1% ИЛИ имя LIKE% name2%)

Ответы [ 3 ]

16 голосов
/ 08 июня 2015

Я знаю, что это немного поздно, но я нашел этот пост, когда изучал его, и нашел лучшее решение, чем предложенное Шоном.

$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();
12 голосов
/ 05 января 2012

Да. $this->db->where() позволяет писать предложения вручную. Вы могли бы сделать это:

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

Установка третьего параметра для false не позволяет CodeIgniter пытаться добавить обратные пометки в предложение.

Ознакомьтесь с документацией Active Record . Раздел под названием $ this-> db-> where (); объясняет четыре метода, которые можно использовать для установки предложений WHERE .

1 голос
/ 03 ноября 2016

Эти две функции group_start() и group_end() были реализованы в CodeIgniter 3.0.3 .Вот немного лучшая реализация в соответствии с исходным вопросом.

$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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...