Если в операторах запроса нет предложений, которые необходимо условно изменить, тогда можно использовать $this->db-query()
.
$sql = "SELECT * FROM customer c LEFT JOIN customer_order co
ON c.customer_number=co.customer_number AND co.order_status IN ('preparing', 'prepared')
WHERE c.customer_status='unpaid' AND c.order_status='unserve' AND co.cus_ord_no IS null";
$query = $this->db->query($sql)->result();
echo json_encode($query);
Возможно, целесообразно включить проверку возврата из query()
хотя, потому что если это не удастся (возвращает false), то вызов result()
вызовет исключение.Один из способов, который может быть обработан, выглядит следующим образом.
$query = $this->db->query($sql);
if($query !== FALSE)
{
echo json_encode($query->result());
return;
}
echo json_encode([]); // respond with an empty array
Query Builder (QB) - хороший инструмент, но он часто излишним.Это добавляет много накладных расходов для создания строки, которая буквально передается в $db->query()
.Если вы знаете строку и ее по какой-то причине не нужно реструктурировать, вам не нужен QB.
QB наиболее полезен, когда вы хотите внести изменения в оператор запроса условно.Сортировка может быть одним из возможных случаев.
if($order === 'desc'){
$this->db->order_by('somefield','DESC');
} else {
$this->db->order_by('somefield','ASC');
}
$results = $this->db
->where('other_field', "Foo")
->get('some_table')
->result();
Так что, если значение $order
равно 'desc'
, оператор запроса будет
SELECT * FROM some_table WHERE other_field = 'Foo' ORDER BY somefield 'DESC'
Но если вы настаиваете на использовании Query BuilderЯ считаю, что это ваш ответ
$query = $this->db
->join('customer_order co', "c.customer_number = co.customer_number AND co.order_status IN ('preparing', 'prepared')", 'left')
->where('c.customer_status','unpaid')
->where('c.order_status','unserve')
->where('co.cus_ord_no IS NULL')
->get('customer c');
//another variation on how to check that the query worked
$result = $query ? $query->result() : [];
echo json_encode($result);