Похоже, вы пытаетесь создать / получить json-выход. Я вижу две проблемы с вашим подходом. 1) Вы не указали приложение / json в своем заголовке Accept 2) Вам нужно указать output = "application / json" в вашем @RequestMapping
и это будет работать?
$this->db->where('LastName', 'Svendson');
$this->db->where('Age', 12);
$this->db->where("(FirstName='Tove' OR FirstName='Ola' OR Gender='M' OR Country='India')", NULL, FALSE);
$query = $this->db->get('Persons');
return $query->result();
В CodeIgniter 3 появились новые методы group_start () и group_end () , которые служат именно для этой цели.
return $this->db
->where('LastName', 'Svendson');
->where('Age', 12);
->group_start()
->where('FirstName','Tove')
->or_where('FirstName','Ola')
->or_where('Gender','M')
->or_where('Country','India')
->group_end()
->get('Persons')
->result();
Вы можете использовать это просто
$this->db->where("status","live")->or_where("status","dead");
вы также можете использовать
$this->db->where("(status='live' OR status='dead')");
Сам запрос не имеет смысла, вы выбираете:
Туве кажется именем мужчины, поэтому выбор пола не требуется. Ола похожа на девичью фамилию, поэтому выбор пола не только не нужен, но и не имеет смысла. Ваш запрос вернет любого 12-летнего мужчину по имени Свендсон, любого 12-летнего из Индии по имени Свенсон, а также Туве и Олу Свендсона, ЕСЛИ им 12 лет.
Почему вы не хотите поместить его в () скобки? Вы хотите сделать это с помощью активной записи по какой-то причине?
с использованием работы с кодовым блоком 3.0, есть новая функция, доступная для отдельной или где и где операции. То есть группировка и конец группы
код, как,
$this->db->where('LastName', 'Svendson');
$this->db->where('Age', 12);
$this->db->group_start();
$this->db->or_where('FirstName','Tove');
$this->db->or_where('FirstName','Ola');
$this->db->or_where('Gender','M');
$this->db->or_where('Country','India');
$this->db->group_end();
$query = $this->db->get('Persons');
return $query->result();
Попробуйте использовать Query grouping
Ссылку для него
http://www.codeigniter.com/userguide3/database/query_builder.html#query-grouping
В Codeigniter мы можем использовать как это легко понять.
$sql = "SELECT
*
FROM
`Persons`
WHERE
LastName = 'Svendson'
AND Age = '12'
AND (
FirstName = 'Tove'
OR FirstName = 'Ola'
OR Gender = 'M'
OR Country = 'India'
)";
$query = $this->db->query($sql);
return $query->result();
В настоящее время в CI2 вы не можете получить доступ к методу Query Builder ($ this-> db -> _ compile_select ()) класса Database, не расширяя класс Database и не изменяя тип доступа метода с private на public / protected, что убивает способность создавать подзапросы так же, как вы пытаетесь построить с помощью класса ActiveRecord. Единственный способ создать подзапрос, подобный тому, который вы пытаетесь построить, - это просто использовать метод запроса db
$table = $this->db->dbprefix('tablename');
$sql = "SELECT * FROM `{$table}` WHERE field1='?' AND (field2='?' OR field3='?') ";
$this->db->query($sql,array($field1,$field2,$field3));
. В блоге CI Subquerys было сообщение об этом, но он устарел и работает только на CI 1.7 Надеюсь, это немного поможет.