Замените конструктор запросов CodeIgniter - PullRequest
0 голосов
/ 23 декабря 2018

Я пытаюсь сделать свою собственную реализацию построителя запросов в codeigniter.По сути, я хотел бы добавить некоторые функции и все предоставленные функции.Что-то вроде:

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

Здесь значения здесь не имеют значения.Я уже создал класс, который расширяет текущий CI_DB_query_builder, но я понятия не имею, где установить мой класс для использования в качестве основного построителя запросов.Я пытаюсь найти похожую проблему в Google, но не могу найти ничего.

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 23 декабря 2018

Я нашел ответ на свой вопрос.Тем не менее, любой другой хороший ответ приветствуется, поскольку мой не самый красивый.

Сначала позвольте мне рассказать вам о том, что я пытался сделать.
Я хотел использовать Библиотека сбора Tightenco , чтобы использовать коллекцию, а не массив.Таким образом, я мог бы использовать более интуитивную функцию массива цепочек:
$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.
Я изменил путь к require_once в строке 171:

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

Я также изменил класс псевдонимов в строке 182

class CI_DB extends CustomQueryBuilder { }

Обратите внимание, что это на codeigniterv3.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;
}

Я действительно надеюсь, что это поможет людям, которые пытаются сделать то же самое.Если вы получили какие-либо отзывы об этом проекте, пожалуйста, дайте мне знать!

...