Я нашел ответ на свой вопрос.Тем не менее, любой другой хороший ответ приветствуется, поскольку мой не самый красивый.
Сначала позвольте мне рассказать вам о том, что я пытался сделать.
Я хотел использовать Библиотека сбора 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;
}
Я действительно надеюсь, что это поможет людям, которые пытаются сделать то же самое.Если вы получили какие-либо отзывы об этом проекте, пожалуйста, дайте мне знать!