我需要从视图中调用一个函数来回显一个值。我使用以下代码,
Controller(test_controller)
public function displayCategory()
{
$this->load->model('Model_test');
$data['categories'] = $this->Model_test->getCategories();
$this->load->view('test_view', $data);
}
public function display($id)
{
$this->load->model('Model_test');
$name= $this->Model_test->getName($id);
return $name;
}
模型(Model_test)
function getCategories() {
$query = $this->db->query("SELECT * FROM category");
if ($query->num_rows() > 0) {
return $query->result();
} else {
return NULL;
}
}
function getName($userId) {
$query = $this->db->query("SELECT name FROM user where id = '$userId' ");
if ($query->num_rows() > 0) {
return $query->row()->name;
} else {
return NULL;
}
}
查看
<div id="body">
<?php
foreach ($categories as $object) {
$temp = $this->test_controller->display($object->id);
echo $object->title . " ". $object->no . $temp . '<br/>';
}
?>
</div>
但运行代码时出现一些错误。
错误消息:未定义属性:视图中的CI_Loader :: $ test_controller
答案 0 :(得分:0)
我不确定您是否使用CodeIgniter 2或3.
无论如何,基本上你不想在View文件中使用任何东西,除了辅助函数或某种“presenter”层(我应该在控制器中调用)。
请阅读本手册page并搜索加入。在那里,您可以了解SQL join directive的实施情况。
您想修改此(getCategories()
)函数,以便返回您需要的数据
function getCategories() {
$this->db->select('category.title, category.no, user.name as username')
->from('category')
->join('user', 'user.id = category.id');
$query = $this->db->get();
if ($query->num_rows() > 0) {
return $query->result();
} else {
return NULL;
}
}
在视图中,您可以像这样
获取用户名foreach ($categories as $object) {
echo $object->title . " ". $object->no . $object->username . '<br/>';
}
我不是100%肯定所以请发表评论我稍后会编辑这个答案。
https://stackoverflow.com/a/24320884/1564365
还可以考虑使用复数命名表格,以便类别,用户 ......
使用“category.id as user.id”(将用户ID存储在“id”字段中的类别表中)也是一种不好的做法,而是使用数据透视表或1:1关系字段的情况下使用“USER_ID”。