आप PostgresConnection वर्ग और PostgresGrammar वर्ग को ओवरराइड कर सकते हैं ताकि PostgresGrammar वर्ग में CompilSelect विधि में अपना तर्क जोड़ सकें।
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;
}
}
सेवा प्रदाता वर्ग को परिभाषित करने की आवश्यकता है, इस सेवा प्रदाता को 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);
});
}
}
config/app.php में कॉन्फ़िगर किया गया
'providers' => [
// ....
DatabasePostgresServiceProvider::class,
Illuminate\Database\DatabaseServiceProvider::class,
],