簡體   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