Třídu PostgresConnection a třídu PostgresGrammar můžete přepsat a přidat svou vlastní logiku do metody CompilSelect ve třídě PostgresGrammar.
class PostgresConnection extends \Illuminate\Database\PostgresConnection
{
/**
* @return \Illuminate\Database\Grammar|\Illuminate\Database\Query\Grammars\PostgresGrammar
*/
protected function getDefaultQueryGrammar()
{
return $this->withTablePrefix(new PostgresGrammar());
}
}
class PostgresGrammar extends \Illuminate\Database\Query\Grammars\PostgresGrammar
{
/**
* Compile a select query into SQL.
*
* @param \Illuminate\Database\Query\Builder $query
*
* @return string
*/
public function compileSelect(Builder $query)
{
$sql = parent::compileSelect($query);
return '/*+ IndexScan(users) */' . $sql;
}
}
Potřebujete definovat třídu poskytovatele služeb, je velmi důležité zaregistrovat tohoto poskytovatele služeb před Illuminate\Database\DatabaseServiceProvider::class
class DatabasePostgresServiceProvider extends ServiceProvider
{
/**
* 此外,在 Illuminate\Database\DatabaseServiceProvider::class 之前注册此服务提供程序非常重要
*
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Connection::resolverFor('postgres', function ($connection, $database, $prefix, $config) {
// Use your own defined PostgresConnection class here.
return new PostgresConnection($connection, $database, $prefix, $config);
});
}
}
Nakonfigurováno v config/app.php
'providers' => [
// ....
DatabasePostgresServiceProvider::class,
Illuminate\Database\DatabaseServiceProvider::class,
],