sql >> データベース >  >> RDS >> PostgreSQL

Laravel eloquent-SELECTの前にヒントを追加する方法はありますか?

    PostgresConnectionクラスとPostgresGrammarクラスをオーバーライドして、PostgresGrammarクラスのcompileSelectメソッドに独自のロジックを追加できます。

    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,
    
        ],
    



    1. WSJDBCConnectionは、タイプOraclejdbcConnectionのオブジェクトをラップしません

    2. 接続されているデータベースがMariaDBかMySQLかをどのように検出できますか?

    3. MySQLShowDatadictionaryのテーブル

    4. 条件付きの行をカウントするときにMySQLでORNULLが必要なのはなぜですか