Laravel capture/override fetch/select 查询事件
Laravel capture/override fetch/select query events
所以我正在开发一个应用程序,我需要使用 laravel 使用的任何方法(例如 find
、all
、select
, get
, 等等
我知道 delete/update/save 有事件要捕获。 SELECT
ish 类型的查询有类似的东西吗?我在某处看到可以使用 newFromBuilder
方法来捕获提取查询:
public function newFromBuilder($attributes = array())
{
$instance = parent::newFromBuilder($attributes);
$instance->fireModelEvent('loaded', true);
return $instance;
}
但我认为以上只能在查询实际上是 运行 之后使用,而我想覆盖任何获取查询以将它们添加到缓存中。
P.S 我知道我可以在一些 Laravel Pcakages 的帮助下使用 CacheTags
但问题是我没有任何支持缓存标签的驱动程序。
感谢您的帮助。
好的,我认为我明白了,我们可以覆盖newBaseQueryBuilder
:
protected function newBaseQueryBuilder()
{
$conn = $this->getConnection();
$grammar = $conn->getQueryGrammar();
$builder = new Builder($conn, $grammar, $conn->getPostProcessor());
// do our stuff with builder
return $builder;
}
所以我正在开发一个应用程序,我需要使用 laravel 使用的任何方法(例如 find
、all
、select
, get
, 等等
我知道 delete/update/save 有事件要捕获。 SELECT
ish 类型的查询有类似的东西吗?我在某处看到可以使用 newFromBuilder
方法来捕获提取查询:
public function newFromBuilder($attributes = array())
{
$instance = parent::newFromBuilder($attributes);
$instance->fireModelEvent('loaded', true);
return $instance;
}
但我认为以上只能在查询实际上是 运行 之后使用,而我想覆盖任何获取查询以将它们添加到缓存中。
P.S 我知道我可以在一些 Laravel Pcakages 的帮助下使用 CacheTags
但问题是我没有任何支持缓存标签的驱动程序。
感谢您的帮助。
好的,我认为我明白了,我们可以覆盖newBaseQueryBuilder
:
protected function newBaseQueryBuilder()
{
$conn = $this->getConnection();
$grammar = $conn->getQueryGrammar();
$builder = new Builder($conn, $grammar, $conn->getPostProcessor());
// do our stuff with builder
return $builder;
}