Codeigniter 解决从视图调用函数时无法预见的视图问题

Codeigniter 解决从视图调用函数时无法预见的视图问题,codeigniter,codeigniter-2,Codeigniter,Codeigniter 2,我在解决一个问题时遇到了一些真正的困难。基本上,我将搜索一个房间,并显示符合条件的房间列表(包括分页)。现在,当我试图要求房间的形象时,问题出现了。第一个图像将显示,但其余图像不会显示,我得到错误信息: 遇到PHP错误严重性:注意 消息:未定义的偏移量:0 文件名:views/search_view.php 电话号码:27 遇到PHP错误严重性:注意 消息:正在尝试获取非对象的属性 文件名:views/search_view.php 电话号码:27 这就是我到目前为止所做的 我的模型: func

我在解决一个问题时遇到了一些真正的困难。基本上,我将搜索一个房间,并显示符合条件的房间列表(包括分页)。现在,当我试图要求房间的形象时,问题出现了。第一个图像将显示,但其余图像不会显示,我得到错误信息:

遇到PHP错误严重性:注意

消息:未定义的偏移量:0

文件名:views/search_view.php

电话号码:27

遇到PHP错误严重性:注意

消息:正在尝试获取非对象的属性

文件名:views/search_view.php

电话号码:27

这就是我到目前为止所做的

我的模型:

function get_room_image($rid)
{
    $q = $this->db
        ->where('room_id',$rid)
        ->limit(1)
        ->get('room_image');

    return $q->result();

}

function search_rooms() 
{
    $q = $this->db
        ->where('features', $this->input->post('features'))
        ->get('rooms');

    $room['results'] = $q->result();

    return $room['results'];
}
我的控制器:

function search()
{
    $data['main_content'] = 'search_view';
    $data['page_title'] = 'Search';

    $data['results'] = $this->site_model->search_rooms();

    $this->load->view('includes/template',$data);
}
$data['main_content'] = 'search_view';
$data['page_title'] = 'Search';

$data['results'] = $this->site_model->search_rooms();

$this->load->view('includes/template',$data);
我的看法是:

...    
<?php foreach ($results['results'] as $room) { 

    $room_images = $this->site_model->get_room_image($room->id); ?>
        <div class="col2 bot">

            <div class="col_head"></div>
                <div class="col_info">
                <table border="0" cellpadding="5" cellspacing="5">
                <tr><td> 
                <img src="<?php echo base_url() . 'room/' . $room_images[0]->image_name; ?>" border="0" class="imgbox" />
                </td> 
...
因此,它似乎没有在每次迭代中正确执行get_room_image函数

欢迎任何建议


首先,我认为您不应该从视图中调用模型。您应该从控制器内调用模型并将其传递给视图。另一篇关于这一点的帖子:

您应该尝试对模型中的表执行联接

型号:

function search_rooms() 
{
$q =  $this->db
 ->select('*')
 ->from('rooms')
 ->where('features', $this->input->post('features'))
 ->join('room_image', 'rooms.id = room_image.room_id');

return $q;
}
控制器:

function search()
{
    $data['main_content'] = 'search_view';
    $data['page_title'] = 'Search';

    $data['results'] = $this->site_model->search_rooms();

    $this->load->view('includes/template',$data);
}
$data['main_content'] = 'search_view';
$data['page_title'] = 'Search';

$data['results'] = $this->site_model->search_rooms();

$this->load->view('includes/template',$data);
视图:


首先,我认为不应该从视图中调用模型。您应该从控制器内调用模型并将其传递给视图。另一篇关于这一点的帖子:

您应该尝试对模型中的表执行联接

型号:

function search_rooms() 
{
$q =  $this->db
 ->select('*')
 ->from('rooms')
 ->where('features', $this->input->post('features'))
 ->join('room_image', 'rooms.id = room_image.room_id');

return $q;
}
控制器:

function search()
{
    $data['main_content'] = 'search_view';
    $data['page_title'] = 'Search';

    $data['results'] = $this->site_model->search_rooms();

    $this->load->view('includes/template',$data);
}
$data['main_content'] = 'search_view';
$data['page_title'] = 'Search';

$data['results'] = $this->site_model->search_rooms();

$this->load->view('includes/template',$data);
视图:


问题解决了,因为我忘了在db查询字符串中的一行中添加“;”

问题解决了,因为我忘了在db查询字符串中的一行中添加“;”

尝试在该行上执行变量转储($room\u images)——查看实际存在的内容。我猜[0]的索引对于在该行上执行var_转储($room_images)的一些variablestry来说是错误的-看看实际上是什么。我猜[0]的索引对于某些变量是错误的当将$room\u images[0]->image\u name转换为$room\u images->image\u name时,我得到了错误:消息:尝试获取非object的属性您是否尝试了联接查询,或者在转换$room\u images[0]时通过添加“;”来修复代码->image\u name to$room\u images->image\u name我收到错误:消息:尝试获取非object的属性您是否尝试了联接查询,或者通过添加“;”来修复代码?