我的模型页面中有这个代码:
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);
}
您认为这里的问题是什么?我的替代解决方案或变化是什么?
答案 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>