【发布时间】:2020-05-24 05:23:19
【问题描述】:
我想在 Views/login.php 中执行一些查询 我已经在 Controller 中创建了数据库连接,但是我需要在 Views 中执行某种查询。 无法在视图中通过 $this->db->query("") 访问它,有什么好的解决方案?
【问题讨论】:
-
这是一个坏主意,违反了 MVC 模式的前提。控制器应该从模型中获取数据并将其传递给视图。
标签: codeigniter-4
我想在 Views/login.php 中执行一些查询 我已经在 Controller 中创建了数据库连接,但是我需要在 Views 中执行某种查询。 无法在视图中通过 $this->db->query("") 访问它,有什么好的解决方案?
【问题讨论】:
标签: codeigniter-4
请注意,正如 DFriend 在这个问题的评论中提到的那样,这是 MVC 模式中的一种不好的做法。查询应始终在将数据传递给控制器的模型中运行,控制器在视图中显示这些数据。
但是,如果您真的想在一个视图中执行查询,则必须在运行查询之前启动您的数据库对象。
$this->db 在您的情况下不存在,因为您的视图没有扩展具有名为 $db 的参数的类
<?php
$db = db_connect();
$query = $db->query('YOUR QUERY');
//you get result as an array in here but fetch your result however you feel to
$result = $query->getResultArray();
?>
在这里您创建一个数据库连接,然后使用您创建的 db 对象运行查询。
【讨论】:
您可以在视图或任何其他函数中使用查询构建器,方法是首先通过首先加载类 $this->load->database() 创建数据库连接的实例,这将使您可以访问构建查询将数据库对象用作 $this->db->query("YOUR RAW QUERY")。因此,您可能会做类似的事情
<?php $this->load->database();
$q = $this->db->query("SELECT * FROM users");
$r = $q->result(); // returns an object by default
?>
注意:在模型之外执行不是一个好习惯,所以只有在必须时才这样做。
【讨论】: