Как сбросить / очистить заказ между двумя последовательными запросами в CodeIgniter? - PullRequest
3 голосов
/ 06 мая 2011

Я пытаюсь вызвать 2 последовательных запроса в CodeIgniter, первый из которых содержит предложение order-by. Проблема в том, что CodeIgniter пытается использовать предложение order by и для второго запроса и выдает ошибку.

Код выглядит примерно так:

 ...
 $sql = $this->db->get_where('expenses',array('category_id' => $category_id));
 $this->db->order_by("date", "asc");
 $data = $sql->result_array();

 foreach($data as $expense_rec)
 {
     $expense_id = $data['expense_id'];
     $sql2 = $this->db->get_where('expense_details',array('expense_id' => $expense_id));
     $detail_rec = $sql2->result_array();
 }
 ...

Для второго запроса скрипт выдает следующую ошибку:

Unknown column 'date' in 'order clause'

SELECT * FROM (`expense_details`) WHERE `expense_id` = '4' ORDER BY `date` asc

Есть ли способ, которым я могу сбросить заказ до вызова второго запроса?

Я использую CodeIgniter 1.7

P.S. Я знаю, что могу объединить два запроса в один, но мне любопытно узнать, есть ли способ, чтобы вышеуказанный код работал в CodeIgniter.

Ответы [ 3 ]

8 голосов
/ 06 мая 2011

Выполнение запроса - это то, что сбрасывает его.

Вы ставите order_by() после выполнения запроса, чтобы он не влиял на исходный запрос, но он начинает создавать следующий запрос.

вместо ...

$sql = $this->db->get_where('expenses',array('category_id' => $category_id));
$this->db->order_by("date", "asc");
$data = $sql->result_array();

сделай это ...

$this->db->order_by("date", "asc");
$sql = $this->db->get_where('expenses',array('category_id' => $category_id));
$data = $sql->result_array();
2 голосов
/ 14 апреля 2013

Я столкнулся с подобной проблемой.В моем случае я строю запрос на основе пользовательского ввода.На полпути в построении запроса может возникнуть проблема, из-за которой я прекращаю строить запрос и выходить из модели.Однако, если другие модели вызываются после этого с другими вызовами Active Record, к ним добавляются ранее построенные запросы, что определенно не является моей целью.

Для решения этой проблемы я скопировал объект DB в новую переменную и использовал его для построения моего запроса.В любом случае эта переменная существует только внутри этой модели, поэтому уничтожается, прежде чем она может повлиять на другие модели.Итак:

$new_db = $this->db;
$new_db->where('user_status', 1);

и т. Д.

2 голосов
/ 06 мая 2011

Вы можете использовать $this->db->_reset_select(), чтобы убрать вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...