Я пытаюсь изменить базовую функциональность eloquent на Manager::table('table')->insert($array)
(и Manager::table('table')->update($array)
), но я не знаю, как.
У меня есть класс, который расширяет менеджера:
class Database extends \Illuminate\Database\Capsule\Manager
Внутри этого класса я создал функцию, которая расширяет table()
, но я не уверен, как сделать так, чтобы она расширяла его insert
и update
, потому что функция table()
возвращает \Illuminate\Database\Query\Builder
и этот рассматриваемый строитель полностью отделен от менеджера.
Есть идеи, как мне этого добиться?
Конечная цель - иметь мою собственную модифицированную версию insert
, поэтому, когда я делаю это Manager::table('table')->insert($array)
, вставка будет делать что-то вроде следующего, а не оригинальную вставку:
public function insert(array $values)
{
if (empty($values)) {
return true;
}
if (! is_array(reset($values))) {
$values = [$values];
} else {
foreach ($values as $key => $value) {
ksort($value);
($value == NULL) ? $values[$key] = '' : $values[$key] = $value;
}
}
return $this->connection->insert(
$this->grammar->compileInsert($this, $values),
$this->cleanBindings(Arr::flatten($values, 1))
);
}
(Обратите внимание, что приведенный выше код является версией функции копирования / вставки действительной функции, модифицированной моими потребностями, поэтому такие вещи, как Arr::flatten
, могут вызвать проблемы, если я просто скопирую / вставлю функцию куда-нибудь. Поэтому я пытаюсь найти официальный способ РАСШИРЯТЬ эту функцию, чтобы мне не приходилось беспокоиться о таких проблемах