Либо сделать:
foreach($Q->result_array() as $key=>$row){
$data[$key]=$row;
$Q2=$this->db->query("select name FROM categories
where id={$row['category_id']}");
if($Q2->num_rows() > 0){
foreach($Q2->result_array() as $row2){
$data[$key]['category']=$row2['name'];
}
}
}
или даже лучше, сделайте правильный запрос:
function getAllProducts(){
$data=array();
$Q=$this->db->query("SELECT p.*, c.name as category FROM products p, LEFT JOIN categories c ON c.id=p.category_id");
if($Q->num_rows() > 0){
foreach($Q->result_array() as $row){
$data[] = $row;
}
}
$Q->free_result(); // <- needed here? don't know
return $data;
}
Я не знаю CodeIgniter, поэтому я не знаю, полностью ли это правильно. Но в целом это намного лучше, так как вы уменьшаете количество обращений к БД, которое всегда хорошо.
Таким образом, у вас есть только один запрос вместо n+1
, если у вас есть n
продуктов.
P.S .: Бьюсь об заклад, CodeIgniter также предоставляет некоторые API для создания JOIN
. Прочитайте документацию .
Я только что увидел, что вы можете сделать это:
$this->db->select('*');
$this->db->from('products');
$this->db->join('categories', 'categories.id = products.category_id', 'left');
$Q = $this->db->get();
Используйте API.