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

时间:2014-03-12 14:23:28

标签: php codeigniter

我的模型页面中有这个代码:

 public function getAll($researcherpk){
 $this->db->select('*');
 $this->db->from('research');
 $this->db->join('researcher', 'researcher = lastname');
 $this->db->where('researcherpk', $researcherpk); 
 return $this->db->get()->row_array();

但是当我在View Page

上使用它时
Age: <?php echo $data['age'];?>        // this work

<?php   foreach ($data as $v){ ?>          //this has an error

  <tr>
      <td><?php echo $v->title?></td>
      <td><?php echo $v->track_records?></td>
  </tr>
<?php } ?>

我收到错误:

Message: Trying to get property of non-object

在我的控制器页面中:

 public function researcher($researcherpk){

 $this->load->model('ResearchModel');

 $result['data'] = $this->ResearchModel->getAll($researcherpk);
 $this->load->view('researcher',$result);

 }

您认为这里的问题是什么?我的替代解决方案或变化是什么?

3 个答案:

答案 0 :(得分:9)

将您的回报更改为:

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

然后尝试使用$v['title']$v['track_records']

<?php foreach ($data as $v): ?>
  <tr>
    <td><?php echo $v['title']?></td>
    <td><?php echo $v['track_records']?></td>
  </tr>
<?php endforeach; ?>

请查看the codeigniter docs了解详情。

result_array()

  

此函数将查询结果作为纯数组

返回

这就是你想要的。

你正在混合它:

row_array()

  

此函数返回单个结果行。如果您的查询有多行,则只返回第一行。

这不是你想要的。

答案 1 :(得分:2)

您正在调用row_array这意味着$data是单行的数组$data['age']有效,因为age是该行中的一个字段。

您可以foreach($data as $v),但这只会循环显示该特定行中的字段

你可以echo $data['title']$data不是多维数组。

如果您想要多行,请使用return $this->db->get()->result_array();。然后你可以遍历行:

foreach ($data as $v){
    echo $v['age'];
    echo $v['title'];
}

答案 2 :(得分:1)

这是一个数组而不是一个对象所以:

改变这个:

  <td><?php echo $v->title?></td>
  <td><?php echo $v->track_records?></td>

对此:

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