【问题标题】:how to access database connection in views in codeigniter 4如何在codeigniter 4的视图中访问数据库连接
【发布时间】:2020-05-24 05:23:19
【问题描述】:

我想在 Views/login.php 中执行一些查询 我已经在 Controller 中创建了数据库连接,但是我需要在 Views 中执行某种查询。 无法在视图中通过 $this->db->query("") 访问它,有什么好的解决方案?

【问题讨论】:

  • 这是一个坏主意,违反了 MVC 模式的前提。控制器应该从模型中获取数据并将其传递给视图。

标签: codeigniter-4


【解决方案1】:

请注意,正如 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 对象运行查询。

【讨论】:

  • 是的,我理解它在某些情况下可能有用的不好的做法。您的解决方案对我有用,谢谢。辅助功能的解决方案是否相同?如果我们需要在 CI4 的辅助函数中执行数据库查询?
  • 是的,如果你想运行查询,你总是需要事先创建一个数据库对象。 $this->db 在您的控制器中工作,因为它扩展了 Codeigniter 的核心控制器,该控制器具有创建名为 $db 的数据库对象的属性
【解决方案2】:

您可以在视图或任何其他函数中使用查询构建器,方法是首先通过首先加载类 $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        
    ?>

注意:在模型之外执行不是一个好习惯,所以只有在必须时才这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多