CodeIgniter 查询结果仅在视图中显示最后一行

Posted

技术标签:

【中文标题】CodeIgniter 查询结果仅在视图中显示最后一行【英文标题】:CodeIgniter Query Results Only Displays Last Row in View 【发布时间】:2013-09-16 00:10:14 【问题描述】:

我想显示我的数据库中的结果列表。目前,我的视图只显示我的查询检索到的最后一行。我在这里想念什么?感谢您提供的任何帮助。

型号:

public function get_agencies() 
    $this->db->select("AgencyNumber, AgencyName, users.id, active");
    $this->db->from('Agency, users');
    $this->db->where('users.id = Agency.id');
    $q = $this->db->get();

    if($q->num_rows() > 0) 
        foreach($q->result() as $agency) 
            $data['agencies'] = $agency;
        
        return $data;
    

控制器:

function modify_agency() 
    $this->load->model('ion_auth_model');
    $this->data['agencies'] = $this->ion_auth_model->get_agencies();

    //added the following 2 lines to load view with header and footer from template         
    $this->data['main_content'] = 'auth/modify_agency';
    $this->load->view('./includes/template', $this->data);

查看:

<?php foreach ($agencies as $agency):?>
    <tr>
        <td><?php echo $agency->AgencyNumber;?></td>
        <td><?php echo $agency->AgencyName;?></td>
        <td><?php if($agency->active == 1)  echo 'Active';  else  echo 'Inactive'; ;?></td>
    </tr>
<?php endforeach;?>

【问题讨论】:

【参考方案1】:

应该是这样的。

$data[] = $agency;

您不需要解析值机构。CodeIgniter 为您完成

$data['agencies'] = $agency;

试试看。

【讨论】:

太棒了!我将我的模型更新为$data[] = $agency;,现在我的完整结果正在显示。感谢您的帮助!【参考方案2】:

在您的模型中,您不会将 $agency 变量推入数组中。它们在每次迭代中都会被替换,因此$data['agencies'] 将只包含最后一次迭代的值。此外,正如 Syed 上面回答的那样,您不需要在代码中包含数组索引值

改成:

$data[] = $agency;

或:

array_push($data, $agency);

希望这会有所帮助!

【讨论】:

这是有道理的,但仍有问题。在我的模型中,我将$data['agencies'] = $agency; 更新为$data['agencies'][] = $agency;。现在从我的角度接收 PHP 错误 - “尝试获取非对象的属性”。 @user1337595:很高兴知道你让它工作了。无论如何,为了正确起见,我已经更新了这个答案。干杯! :) 好的,让我运行你的逻辑,你有用户和关于用户的数据,你想显示特定用户的数据不是吗 @syedshah:嗯?您的回答已被接受。另外,我认为您在评论错误的线程;) 是的,对不起@AmalMurali【参考方案3】:

控制器:

(...)
$this->data['agencies'] = $this->ion_auth_model->get_agencies();
(...)
$this->load->view('./includes/template', $this->data);
(...)

型号:

(...)
if($q->num_rows() > 0) 
    foreach($q->result() as $agency) 
        $data['agencies'] = $agency;
    
    return $data;

查看:

<?php foreach ($agencies as $agency):?>
(...)

请注意,如果您的 get_agencies 中没有一行结果,则您不会返回任何内容,并且您将在视图中的 foreach 函数中收到错误。

你可以这样返回:

public function get_agencies() 
    $this->db->select("AgencyNumber, AgencyName, users.id, active");
    $this->db->from('Agency, users');
    $this->db->where('users.id = Agency.id');
    $q = $this->db->get();

    return ($q->num_rows() > 0) ? $q->result() : array();

【讨论】:

以上是关于CodeIgniter 查询结果仅在视图中显示最后一行的主要内容,如果未能解决你的问题,请参考以下文章

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

Codeigniter 未显示 MySQL 查询获取的数组的正确结果。

获取 CodeIgniter ActiveRecord 结果中每一行的关联数组

如何仅在表格视图的文本最后一部分中添加页脚文本?

如何在codeigniter 3的一条记录中显示数据?

如何将codeigniter视图文件gmap存储到redis以使视图显示更快?