Codeigniter:foreach 方法或结果数组?? [模型+视图]

Posted

技术标签:

【中文标题】Codeigniter:foreach 方法或结果数组?? [模型+视图]【英文标题】:Codeigniter: foreach method or result array?? [Models +View] 【发布时间】:2012-08-19 22:46:57 【问题描述】:

我目前正在学习使用 Framework Codeigniter 查看数据库中数据的教程。我学习的方法有很多种。是否有更可靠的方法 - 显示为数组或在视图文件中使用“foreach”?任何意见都会有所帮助。

这是我使用两种方法的代码:

方法一模型:

function getArticle()
    $this->db->select('*');
    $this->db->from('test');
    $this->db->where('author','David');
    $this->db->order_by('id', 'DESC');
    $query=$this->db->get();

    if($query->num_rows() > 0) 
        foreach ($query->result() as $row) 
            $data[] = $row;
        
        return $data;
    $query->free_result();

方法一查看文件:

 <?php foreach($article as $row) ?>
        <h3><?php echo $row->title;  ?></h3>
        <p><?php echo $row->content;  ?></p>
        <p><?php echo $row->author;  ?></p>
        <p><?php echo $row->date; ?></p>
<?php  ?>

方法2模型: 类 News_model 扩展 CI_Model

function getArticle()
    $this->db->select('*');
    $this->db->from('test');
    $this->db->where('author', 'David');
    $this->db->order_by('id', 'DESC');
    $query=$this->db->get();

    if ($query->num_rows()>0)  
        return $query->row_array();
    
    $query->free_result();

方法二查看文件:

    <?php echo '<h3>' .$article['title'].'</h3>' ?>
    <?php echo '<p>' .$article['content']. '</p>' ?>
    <?php echo '<p>' .$article['author']. '</p>' ?>
    <?php echo '<p>'. $article['date']. '</p>' ?>

【问题讨论】:

考虑到查询只返回一条记录,我会更喜欢第二种方法。 不明白为什么你在第一个方法的模型中通过结果集循环而不返回它? @Vlakarados,当你在我的第一种方法中说我正在循环而不是返回它时 - 你能描述一下我将如何返回它吗?道歉,因为我是框架的新手,不确定如何从视图中显示。 我稍后会发布它作为答案 【参考方案1】:

我会这样做:

型号

function getArticle() 
    $this->db->select('*');
    $this->db->from('test');
    $this->db->where('author','David');
    $this->db->order_by('id', 'DESC');
    return $this->db->get()->result();

控制器

function get_tests() 
    $data = array(
        'tests' => $this->mymodel->getArticle()
    
    $this->load->view('myview', $data);

查看

<table>
    <?php foreach($tests as $test)  ?>
    <tr>
        <td><?php echo $test->title;?></td>
        <td><?php echo $test->content;?></td>
        <td><?php echo $test->author;?></td>
        <td><?php echo $test->date;?></td>
    </tr>
</table>

如果您希望使用数组而不是对象,请在模型更改行中

return $this->db->get()->result();

return $this->db->get()->result_array();

在视图中回显

<td><?php echo $test['title'];?></td>

附言

在您的代码中,您使用了$query-&gt;free_result();,但它甚至不会运行,因为当您使用关键字return 时,之后的所有内容都不会被解析。反正没有必要释放结果。

附注 2。

您使用if($query-&gt;num_rows() &gt; 0) ,但没有else 部分,这意味着它也没有必要。如果您不向视图中的 foreach 语句返回任何行,则不会出现任何错误。

【讨论】:

非常感谢,这更简洁、更易于理解,并且可能会使用数组——但知道如何使用对象方式完成操作很方便,所以 sn-p 这个!非常感谢。 我真的推荐使用对象,特别是如果您是 PHP 和 PHP 框架中的 OOP 新手。当我开始使用数组时,我认为它更简单,但现在我明白这是一种幻觉,对象可以让你变魔术。在 CodeIgniter 中你不调用对象的静态方法,这让你更容易上手,但这是你自己决定的!

以上是关于Codeigniter:foreach 方法或结果数组?? [模型+视图]的主要内容,如果未能解决你的问题,请参考以下文章

使用codeigniter对查询进行foreach?

foreach 给了我四次相同的行(PHP、Active Record、CodeIgniter)

PHP CodeIgniter Foreach 返回不正确的数据

PHP foreach 数据库结果

Codeigniter查询结果返回带有setter的自定义结果对象

Codeigniter:查看 foreach 调用控制器