繁体   English   中英

替换CodeIgniter查询构建器

[英]Replace CodeIgniter Query builder

我正在尝试在codeigniter中实现查询生成器的自己的实现。 基本上,我想添加一些功能以及所有提供的功能。 就像是 :

$this-db->from('myTable')
        ->where('id', 1)
        ->custom_where('name', 'customsValues')
        ->get()

这里的值是irrelevent。 我已经建立了一个扩展当前CI_DB_query_builder的类,但是我不知道在哪里设置我的类以用作主要查询构建器。 我试图在Google上查找类似的问题,但找不到任何东西。

任何帮助,将不胜感激。

我找到了我问题的答案。 但是,任何其他好的答案都值得欢迎,因为我的不是最漂亮的。

首先,让我引导您完成我尝试做的事情。
我想使用Tightenco的collect库来使用collection而不是array。 这样,我可以使用更直观的链数组功能:
$this->db->from('...')->results()->map(function($items) { ... })->toArray();

然后,我想拥有自己的功能,例如where_if

我开始制作自己的查询构建器类,该类从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());
    }
}

要将此类链接为主Querybuilder,我必须在文件system/database/DB.php
我在第171行中更改了require_once的路径:

require_once(APPPATH.'libraries/QueryBuilder/CustomQueryBuilder.php');

我还更改了182行的别名类

class CI_DB extends CustomQueryBuilder { }

请注意,这是在codeigniter v3.0.6上的,您的行号可能有所不同。

现在,我需要导入一些函数,因此PHPStorm上的自动完成功能仍将指向我的自定义querybuilder,因为一旦使用了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;
}

我真的希望这对尝试相同操作的人有所帮助。 如果您对此项目有任何反馈,请告诉我!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM