2016-11-18 3 views
1

Я использую Codeigniter 3.0.3. Я хочу построить запрос с построителем запросов, но разбить сборку моего запроса на несколько функций. Например:Codeigniter Query Builder отправлен в несколько функций

class MyCart{ 

public function __construct() { 
    $this->db->select('A.id, A.title, A.price'); 
    $this->db->from('articles A'); 
} 

public function check_type($aTypeOfArticle){ 
    $this->db->where("A.type=".$aTypeOfArticle); 
} 

public function check_price($aMaxPrice){ 
    $this->db->where("A.price<=".$aMaxPrice); 
} 

public function get_result(){ 
    $query = $this->db->get(); 
    return $query->result(); 
} 

} 

Но когда я пытаюсь это, this->db->get() возвращает ложь. Можно ли сделать эту работу?

ответ

1

Это более чем вероятно работать лучше для вас,

public function query() 
{ 
    $this->db->select('A.id, A.title, A.price'); 
    $this->db->from('articles A'); 

    if(check_type($aTypeOfArticle)) 
    { 
    $this->db->where("A.type=".$aTypeOfArticle); 
    } 

    if(check_price($aMaxPrice)) 
    { 
    $this->db->where("A.price<=".$aMaxPrice); 
    } 
} 

public function check_type($aTypeOfArticle){ 
    // Do processing 
    return true or false; 
} 

public function check_price($aMaxPrice){ 
    // Do Processing 
    return true or false; 
} 

Постройте запрос в одной функции и вызвать другую функцию для результата обработки.

+0

Таким образом, невозможно разбить запрос на функции differents? Потому что у меня есть много критериев, чтобы проверить и поставить их все в одну и ту же функцию, будет довольно уродливым. – ZeeCast

+0

Не то, чтобы я знал, но это не говорит, что нет, я просто ничего не знаю. Я бы сказал, что способ, которым я показал, - это способ, которым мы это делаем здесь. – Blinkydamo

0

Посмотрите на Method Chaining. Вы должны иметь возможность кэшировать возвращаемое значение вызова from() (в свойстве объекта, например,), а затем использовать это значение для объединения других методов на нем.

Смежные вопросы