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

时间:2012-06-22 00:20:28

标签: codeigniter codeigniter-2

我正在解决一个问题。基本上我会搜索一个房间,我会显示符合标准的房间列表(包括分页)。现在,当我试图打电话给房间的图像时,问题出现了。第一张图片会显示,但其余的不会显示,我收到错误:

  

遇到严重错误:通知

     

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

     

文件名:views / search_view.php

     

行号:27

     

遇到严重错误:通知

     

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

     

文件名: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);
}

我的观点:

...    
<?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> 
...

第27行实际上是带有img标记的行

当我按要求执行var_dump时,我得到以下内容:

array(1) {
  [0]=>
  object(stdClass)#27 (3) {
    ["id"]=>
    string(1) "1"
    ["room_id"]=>
    string(1) "1"
    ["image_name"]=>
    string(36) "1614d828817ac5b396660621048b167a.jpg"
  }
}

array(0) {}
array(0) {}
array(0) {}
...

似乎它没有正确执行每次迭代的get_room_image函数

欢迎任何建议。

此致

2 个答案:

答案 0 :(得分:3)

首先,我认为您不应该在视图中调用模型。您应该从控制器内调用模型并将其传递给视图。另一个SO帖子谈到:https://stackoverflow.com/a/1733309/1260593

您应该尝试在模型中的表上执行连接。

型号:

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;
}

控制器:

$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->result() as $room) { 

   $image = $room->image_name;
    <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/' . $image; ?>" border="0" class="imgbox" />
            </td> 
}

答案 1 :(得分:0)

问题已解决,因为我忘了添加“;”在我的数据库查询字符串

中的一行
相关问题