Мне нужно получить все строки, которые фильтруются по запросу. Но из модели в контроллер возвращается только первая строка.

Ниже приводится моя модельная функция. Как получить все необходимые данные?

public function getOfferTags($param) {

    $this->db->select('tags.*');
    $this->db->from('tags');
    $this->db->join('offer_tag', 'offer_tag.tag_id = tags.id');
    $this->db->join('offers', 'offers.id = offer_tag.offer_id');
    $this->db->where('offers.id', $param);
    $query = $this->db->get();
    return $query->row();    

}
1
shavindip 17 Сен 2018 в 11:30

2 ответа

Лучший ответ

Просто не возвращайте строку и извлекайте в этом месте как форму массива, например

return $query->result_array();

После этого проверяем контроллер и получаем результат в массиве.

2
Mehta Harshit 17 Сен 2018 в 08:36

Я просто хотел добавить, поскольку вы новичок в CI, что вы всегда должны проверять, являются ли они строками, прежде чем использовать массив, чтобы предотвратить уведомления или проблемы. с помощью метода Мехты вы бы сделали if(count($rows) > 0) { //rows exist } else { // no rows, display error .etc. } или можете:

$query = $this->db->get();
if ($query->num_rows() > 0) {
    return $query->result_array(); // or result() for obj
}
return false;

Использование:

if ($this->somemodel->getOfferTags($stmt)) {
    // has data
} else {
    // no data
}

Важно начать с хороших практик, и это поможет;)

1
Alex 17 Сен 2018 в 09:17