как "сохранить" статус активной записи codeigniter - PullRequest
2 голосов
/ 23 августа 2011

В моем списке CURD для статей мне нужно получать статьи из базы данных, используя множество условий, после получения количества подходящих статей (без ограничений) мне нужно получить первые 10 подходящих статей (предел 10). Поэтому я хочу сохранить статус activerecord, если это возможно, мне не нужно снова писать «где». Вот мой код:

//select num
$this->db->select('count(*) as num')
//conditions
$this->db->where/or_where/having/order_by//many conditions...
//get num
$num = $this->db->get('articles')->first_row()->num;
//get articles
$this->db->limit(10);
$articles = $this->db->get('articles')->result();

Когда я закончил свой первый запрос, статус активной записи пуст, поэтому второй запрос неверен. Есть ли способ сохранить это?

Ответы [ 3 ]

4 голосов
/ 06 февраля 2013

Я знаю, что это старый, но я также искал способ сделать это, в конце концов нашел встроенное решение:

// Start of the query you want to re-use
$this->db->start_cache();
//select num
$this->db->select('count(*) as num')
//conditions
$this->db->where/or_where/having/order_by//many conditions...
// End of the query you want to re-use
$this->db->stop_cache();

//get num
$num = $this->db->get('articles')->first_row()->num;
//get articles
$this->db->limit(10);
$articles = $this->db->get('articles')->result();

// Clear the saved query 
$this->db->flush_cache();
0 голосов
/ 23 августа 2011

Вы можете просто использовать простое условие if

function get_data($type) {
    //select num
    $this->db->select('count(*) as num')
    //conditions
    $this->db->where/or_where/having/order_by//many conditions...

    //get num
    if($type == 'count')
        return $this->db->get('articles')->first_row()->num;

    //get articles
    if($type == 'articles') {
        $this->db->limit(10);
        return $this->db->get('articles')->result();
    }
}

Хотя я не уверен, есть ли что-то конкретное для codeigniter, которое может упростить это, это должно работать.

0 голосов
/ 23 августа 2011

Я полагаю, что нет причин, по которым ваш подход не должен работать.Например, взяв ваш фрагмент кода, приведя в порядок и применив к нему некоторые условия:

//select num
$this->db->select('count(*) as num');

//conditions
$this->db->where(array('title' => 'Hello world'));

//get num
$num = $this->db->get('articles')->first_row()->num;

//get articles
$this->db->limit(10);

$articles = $this->db->get('articles')->result();

echo "!".$num."!<br />";
print_r($articles);
exit();

Используя это в моем тестовом приложении, я собираю результат $num, а затем полный набор записей в $articles.

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