Codeigniter模型foreach只返回单个记录

时间:2014-04-03 13:22:19

标签: php codeigniter

我们在模型中使用以下代码,我们传递一个文本字符串,其中包含不同的专辑,exlode,将其转换为数组,我们在foreach中传递数组ID,并将foreach返回为10 20个不同的专辑结果,但是当我们从Controller调用这个函数时,它只返回单个1条记录,代码中有什么错误?

public function get_footer_links($album_ids) {
    $album_ids = explode(',', $album_ids);
    foreach ($album_ids as $album_id) {

        $this->db->select('ci_albums.album_name, ci_albums.album_slug, ci_categories.cat_slug'); 
        $this->db->from('ci_albums');
        $this->db->join('ci_categories', 'ci_categories.cat_id = ci_albums.cat_id' , 'left');
        $this->db->where('album_id', $album_id);
       $results = $this->db->get()->result();
    }

    return $results;
}

查看

<?php foreach ($footer_links as $footer_links): foreach ($footer_links as $footer_link): ?>
       <a href="<?php echo site_url() . $footer_link->cat_slug .'/'. $footer_link->album_slug .'.html'; ?>" target="_blank"><?php echo ucwords($footer_link->album_name); ?></a> | 
    <?php endforeach; endforeach; ?>

2 个答案:

答案 0 :(得分:0)

它仅返回1个结果,因为在foreach的每个循环中都会覆盖$ result变量,因此您会错过之前获得的所有结果。
您需要使用数组而不是$result并返回到数组的控制器。

例如:

$result_array[] = $this->db->get()->result()

在循环之后你需要返回数组:

return $result_array

答案 1 :(得分:0)

在每次迭代的代码中,$ results被foreach循环的前一次迭代所取代,这就是$ results只保存一条记录的原因。

public function get_footer_links($album_ids)
    {
        $album_ids = explode(',', $album_ids);
        $results = array();
        foreach ($album_ids as $album_id)
        {

            $this->db->select('ci_albums.album_name, ci_albums.album_slug, ci_categories.cat_slug');
            $this->db->from('ci_albums');
            $this->db->join('ci_categories', 'ci_categories.cat_id = ci_albums.cat_id', 'left');
            $this->db->where('album_id', $album_id);
            $result = $this->db->get()->result();
            array_push($results, $result);
        }

        return $results;
    }