【问题标题】:What's the equivalent of $this->db->last_query() in Codeigniter 4?Codeigniter 4 中 $this->db->last_query() 的等价物是什么?
【发布时间】:2020-05-16 22:09:23
【问题描述】:

我刚开始学习 Codeigniter 4。我的查询总是生成 NULL,我不知道为什么。如何像 Codeigniter 3 一样查看生成的 SQL Select 命令?

在 Codeigniter 3 中,这个命令完成了这项工作:

echo $this->db->last_query();

这是我在 Codeigniter 4 中的控制器代码,我需要获取生成的查询:

$cityModel = new CityModel();
$cities = $cityModel
    ->select('city.name AS cityName')
    ->select('county.name AS countryName')
    ->select('province.name AS provinceName')
    ->join('province', 'city.province_id = province.id', 'left')
    ->join('county', 'city.county_id = county.id', 'left')
    ->result();

更新: 我试过这段代码,但它返回一个空字符串:

var_export((string)$cityModel->db->getLastQuery());

【问题讨论】:

  • “我的查询总是生成 NULL”?也许county.name 应该是country.name“$db 是什么?它没有在控制器中定义”?你可以这样定义它:$db=$this->db;
  • echo $this->db->getLastQuery();

标签: php codeigniter activerecord codeigniter-4


【解决方案1】:

此代码将帮助您获取 codeigniter 4 中的最后一个查询。

 $this->db = \Config\Database::connect();
 $data = $builder->get()->getResult();
 echo $this->db->getLastQuery(); die;

【讨论】:

    【解决方案2】:

    这应该会显示最终查询:

    $cityModel->getLastQuery()->getQuery()
    

    【讨论】:

      【解决方案3】:

      您可以使用 getCompiledSelect 它将返回查询 SELECT 命令。

      $sql = $cityModel->getCompiledSelect();
      echo $sql;
      

      【讨论】:

      • 在您的情况下,它将是 $cityModel->getCompiledSelect();它带有 $this->db->getCompiledSelect()
      • 谢谢。这行得通!请编辑您的答案。那我就接受了
      【解决方案4】:

      在 CI 4 中参考 Doc

      你可以使用getLastQuery()作为

      $query = $db->getLastQuery();
      echo (string)$query;
      

      【讨论】:

      • $db 是什么?它没有在控制器中定义。
      猜你喜欢
      • 2020-12-02
      • 2013-04-03
      • 2016-07-04
      • 2020-07-24
      • 2011-05-26
      • 2014-08-08
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      相关资源
      最近更新 更多