我正在尝试修改雄辩的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
,并且所讨论的构建器与Manager完全分开。
任何想法我该如何实现?
最终目标是拥有自己的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
这样的普通东西会引起问题。我试图找到一种扩展该功能的正式方法,这样我就不必担心此类问题了