替换 CodeIgniter 查询生成器
Replace CodeIgniter Query builder
我正在尝试在 codeigniter 中实现自己的查询构建器。
基本上我想添加一些功能和所有提供的功能。像 :
$this-db->from('myTable')
->where('id', 1)
->custom_where('name', 'customsValues')
->get()
这里的值是无关紧要的。
我已经构建了一个扩展 en current CI_DB_query_builder
的 class,但我不知道在哪里设置我的 class 以用作主要查询构建器。我试图在 google 上查找类似的问题,但找不到任何东西。
如有任何帮助,我们将不胜感激。
我找到了问题的答案。但是,欢迎任何其他好的答案,因为我的不是最漂亮的。
首先让我向您介绍一下我正在尝试做的事情。
我想使用 Tightenco's collect library 来使用集合而不是数组。这样我就可以使用更直观的链式数组函数:
$this->db->from('...')->results()->map(function($items) { ... })->toArray();
然后,我想有自己的功能,比如where_if
。
我首先制作了自己的查询构建器 class,它是 CI_DB_query_builder
的扩展。我在下面有一个例子:
<?php
require BASEPATH . 'database/DB_query_builder.php';
class CustomQueryBuilder extends CI_DB_query_builder {
public function where_if($where, $value, $condition) : CustomQueryBuilder {
if($condition) {
$this->where($where, $value);
}
return $this;
}
public function results() : \Tightenco\Collect\Support\Collection {
return \Tightenco\Collect\Support\Collection::make($this->get()->result_array());
}
}
为了link这个class作为主要的Querybuilder,我不得不在文件system/database/DB.php
中改变它。
我在第 171 行更改了 require_once
的路径:
require_once(APPPATH.'libraries/QueryBuilder/CustomQueryBuilder.php');
我还更改了第 182 行的别名 class
class CI_DB extends CustomQueryBuilder { }
请注意,这是在 codeigniter v3.0.6 上,您的行号可能不同。
现在,我需要导入一些函数,这样 PHPStorm 上的自动完成功能仍会指向我的自定义查询生成器,因为一旦我使用函数 from
,它就会返回一个 CI_DB_query_builder
对象。
这是我导入最常用函数的方法。
/**
* Nothing changed here, for autocompletion only
* @param mixed $from
* @return $this|CI_DB_query_builder
*/
public function from($from) {
parent::from($from);
return $this;
}
我真的希望这能帮助那些正在尝试同样事情的人。如果您对此项目有任何反馈,请告诉我!
我正在尝试在 codeigniter 中实现自己的查询构建器。 基本上我想添加一些功能和所有提供的功能。像 :
$this-db->from('myTable')
->where('id', 1)
->custom_where('name', 'customsValues')
->get()
这里的值是无关紧要的。
我已经构建了一个扩展 en current CI_DB_query_builder
的 class,但我不知道在哪里设置我的 class 以用作主要查询构建器。我试图在 google 上查找类似的问题,但找不到任何东西。
如有任何帮助,我们将不胜感激。
我找到了问题的答案。但是,欢迎任何其他好的答案,因为我的不是最漂亮的。
首先让我向您介绍一下我正在尝试做的事情。
我想使用 Tightenco's collect library 来使用集合而不是数组。这样我就可以使用更直观的链式数组函数:
$this->db->from('...')->results()->map(function($items) { ... })->toArray();
然后,我想有自己的功能,比如where_if
。
我首先制作了自己的查询构建器 class,它是 CI_DB_query_builder
的扩展。我在下面有一个例子:
<?php
require BASEPATH . 'database/DB_query_builder.php';
class CustomQueryBuilder extends CI_DB_query_builder {
public function where_if($where, $value, $condition) : CustomQueryBuilder {
if($condition) {
$this->where($where, $value);
}
return $this;
}
public function results() : \Tightenco\Collect\Support\Collection {
return \Tightenco\Collect\Support\Collection::make($this->get()->result_array());
}
}
为了link这个class作为主要的Querybuilder,我不得不在文件system/database/DB.php
中改变它。
我在第 171 行更改了 require_once
的路径:
require_once(APPPATH.'libraries/QueryBuilder/CustomQueryBuilder.php');
我还更改了第 182 行的别名 class
class CI_DB extends CustomQueryBuilder { }
请注意,这是在 codeigniter v3.0.6 上,您的行号可能不同。
现在,我需要导入一些函数,这样 PHPStorm 上的自动完成功能仍会指向我的自定义查询生成器,因为一旦我使用函数 from
,它就会返回一个 CI_DB_query_builder
对象。
这是我导入最常用函数的方法。
/**
* Nothing changed here, for autocompletion only
* @param mixed $from
* @return $this|CI_DB_query_builder
*/
public function from($from) {
parent::from($from);
return $this;
}
我真的希望这能帮助那些正在尝试同样事情的人。如果您对此项目有任何反馈,请告诉我!