【问题标题】:Codeigniter php MVCCodeigniter php MVC
【发布时间】:2015-05-30 14:04:52
【问题描述】:

我有一个名为“News”的表格,包含三列:“id”、“title”和“details”

我在 codeigniter 模型类(称为“News_model”)中有一个函数(“get_entry”)

function get_entry()
    {
        $this->load->database();
        return $this->db->select('id,title,details')->from ('news');
        $data['newsarray'] = $this->db->row_array();      
        return $data['newsarray'];
    }

我正在连接到数据库,所以这不是问题。我想从 get_entry() 中返回一个可迭代数组,方法是使用以下代码从控制器文件中调用函数。我想使用下面的代码将它推入另一个数组(称为'$data['theNews']')。

foreach ($this->News_model->get_entry() as $key => $value){
            array_push($data['theNews'],$value->title);
        }

我一直使用此 (https://www.codeigniter.com/user_guide/general/models.html) 上的代码作为模板(特别是函数 'get_last_ten_entries()' 但我认为我与上面发布的代码很接近。我将不胜感激。

【问题讨论】:

  • 您的 get_entry 函数仅返回 1 行。如果您想遍历多行 - 重写您的函数,使其返回 10 个或更多结果。
  • 请在$data['newsarray']中发布您收到的内容
  • 内置代码 sn-ps 仅适用于 JavaScript/HTML/CSS...您不能在 OP 中运行 PHP。已移除。谢谢。
  • 在这里您可以找到最新的框架文档:v3v2

标签: php codeigniter model-view-controller


【解决方案1】:

关于您的代码:

您的 get_entry 函数中有两个“返回”:

function get_entry()
{
    $this->load->database();
    // First
    return $this->db->select('id,title,details')->from ('news');
    $data['newsarray'] = $this->db->row_array();      
    // Second
    return $data['newsarray'];
}

改成:

function get_entry()
{
    $this->load->database();
    $query = $this->db->select('id,title,details')->from('news');
    $data['newsarray'] = $query->row_array();      
    return $data['newsarray'];
}

它现在应该可以工作了。

一些建议:

不再使用 Codeigniter 2。 Version 3 is alive.

如果您打算返回整个表列,我建议您使用以下代码进行查询:

$query = $this->db->get('news', 1, 20);

其中 1、20 是限制。

现在你可以得到结果了:

return $query->result();

一个简单的例子:

function get_entry()
{
    $this->load->database();
    $query =  $this->db->get('news', 1, 20);
    return $query->result();
}

此方法以对象数组的形式返回查询结果,您可以在控制器中像这样打印:

$news_array = $this->News_model->get_entry();
foreach ($news_array as $news)
{
        echo $news->id;
}

查看CI 3 Query Builder查询构建器以获取更多示例。

还有一个建议,如果全局需要,只需在 application/config/autoload.php 中自动加载数据库库即可。

【讨论】:

  • 星号不是代码的一部分。只需使用 cmets 来指示行。 // <-- this line
  • 能否请您发布错误?您使用的是哪个代码?第一个还是最后一个例子?
  • 自从我将“get_entry”函数更改为您发布的内容后,我在运行 php 页面时没有收到任何错误,但现在当我尝试从控制器调用此函数时,如下所示,我什么也得不到.我想将从函数返回的每一行添加到一个名为“theNews”的数组中,但首先我只想回显返回的内容,因此我将添加到数组中的行注释掉,如您所见。 $data['theNews']=array(); foreach ($this->News_model->get_entry() as $key => $value){ echo $key;//array_push($data['theNews'],$value->title); }
  • 好的,知道了,但我不明白您使用的是哪个功能,是这个吗? : function get_entry() { $this->load->database(); $query = $this->db->get('news', 1, 20);返回$查询->结果(); }
  • 是的,我在函数中使用了该代码。我相信一切正常
【解决方案2】:

在函数中将代码更改为此有效:

function get_entry()
    {
        $this->load->database();
        $query =  $this->db->get('news');
        //return $query->result();

        foreach ($query->result() as $row)
        {
            echo "</br>";   
            echo $row->id;
            echo "</br>";       
            echo $row->title;
            echo "</br>";   
            echo $row->details;
            echo "</br>";   
        }

    }

像这样调用函数会打印出来:

$news_array = $this->News_model->get_entry();

【讨论】:

    猜你喜欢
    • 2012-05-21
    • 2011-12-06
    • 2015-11-05
    • 1970-01-01
    • 2013-10-28
    • 2015-10-26
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    相关资源
    最近更新 更多