我正在尝试使用get_where来获取所有者等于登录用户的所有数据库记录的列表。
这是我在我的控制器中的功能;
function files()
{
$owner = $this->auth->get_user();
$this->db->get_where('files', array('owner =' => '$owner'))->result();
}
在我看来,我有以下内容;
<?php foreach($query->result() as $row): ?>
<span><?=$row->name?></span>
<?php endforeach; ?>
当我尝试访问视图时,我收到致命错误:在第1行的/views/account/files.php中的非对象上调用成员函数result()。
想知道是否有人对此可能有什么想法?
谢谢
答案 0 :(得分:20)
CodeIgniter是一个基于MVC原则的框架。因此,您通常会将应用程序逻辑,数据抽象和“输出”分离到各自的区域以供CodeIgniter使用。在这种情况下:控制器,模型和视图。
仅供参考,您通常应将“数据”代码作为模型函数,在本例中为get_where功能。我强烈建议您仔细阅读提供的User Guide以了解CodeIgniter,它应该掌握大部分步骤。请参阅:目录(右上角)。
<强> TL; DR 强>
要解决您的问题,您需要确保将控制器变量传递到您的视图:
function files()
{
$owner = $this->auth->get_user();
$data['files'] = $this->db->get_where('files', array('owner =' => '$owner'))->result();
$this->load->view('name_of_my_view', $data);
}
然后确保在视图中使用正确的变量:
<?php foreach($files as $row): ?>
<span><?=$row['name']; ?></span>
<?php endforeach; ?>
答案 1 :(得分:4)
<?php foreach($query->result() as $row): ?>
<span><?=$row->name?></span>
<?php endforeach; ?>
删除结果函数。
<?php foreach($query as $row): ?>
<span><?=$row->name?></span>
<?php endforeach; ?>
顺便说一下。在返回结果之前测试结果的查询是一个更好的主意。
function files()
{
$owner = $this->auth->get_user();
$query = $this->db->get_where('files', array('owner =' => '$owner'))->result();
if ($query->num_rows() > 0)
{
return $query->result();
}
return FALSE;
}
答案 2 :(得分:0)
public function get_records(){
return $this->db->get_where('table_name', array('column_name' => value))->result();
}
这是使用get_where()方法从数据库返回数据的方法。
答案 3 :(得分:0)
$owner
,将其转换为文字字符串-换句话说,将其表示为美元符号,后跟五个字母,这肯定不是您想要的。where
方法的默认比较是=
,因此您无需声明等号。get_user()
返回一个对象-您希望访问该对象的当前用户ID。这将需要将->id
链接到方法调用的末尾以访问id属性。现在,让我们重新编写您的MVC架构。
故事从控制器开始。您没有传入任何数据,因此它的职责是:
*请注意,这里没有查询,也没有内容显示。
控制器:(没有一次性变量)
public function files() {
$this->load->model('Files_model');
$this->load->view(
'user_files',
['files' => $this->Files_model->Files($this->auth->get_user()->id)]
);
}
或者,如果您喜欢声明性的好处/可读性,则可以使用一次性变量编写控制器。
public function files() {
$this->load->model('Files_model');
$userId = $this->auth->get_user()->id;
$data['files'] = $this->Files_model->Files($userId);
$this->load->view('user_files', $data);
}
模型:(传递参数,返回结果集)
public function Files($userId) {
return $this->db->get_where('files', ['owner' => $userId])->result();
}
在上面的代码段中,生成的查询将是:
SELECT * FROM files WHERE owner = $userId
如果没有合格结果或对象的索引数组,则结果集(假设查询适合db表模式)将为空数组。无论哪种方式,返回值都将是一个数组。
在最后一步中,视图将收到填充为$files
的结果集(变量由在视图加载方法中声明的关联的第一级键命名)。
查看:
<?php
foreach ($files as $file) {
echo "<span>{$file->name}</span>";
}
{
和}
并不是必不可少的,我只是更喜欢在IDE中阅读。
总而言之,数据流如下:
控制器->模型->控制器->视图
仅该模型进行数据库交互。 只有视图打印到屏幕上。