Настраиваемая функция eloquent's table () -> insert () - PullRequest
1 голос
/ 26 марта 2019

Я пытаюсь изменить базовую функциональность 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, могут вызвать проблемы, если я просто скопирую / вставлю функцию куда-нибудь. Поэтому я пытаюсь найти официальный способ РАСШИРЯТЬ эту функцию, чтобы мне не приходилось беспокоиться о таких проблемах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...