web-dev-qa-db-ja.com

Yii2でデフォルトスキーマを設定する方法

私のYii2はPostgreSQLでセットアップされています。プロジェクトごとに個別のデータベースを使用する代わりに、プロジェクトごとにスキーマを使用するのが好きです。後のセットアップでの問題は、構成からデフォルトスキーマ「defaultSchema」を選択する方法がわからないことです。

移行コマンドを実行するとデフォルトで「パブリック」スキーマになるため、移行テーブルに問題があります。デフォルトの「パブリック」スキーマは、データベースユーザーのsearch_pathの使用も防止します。 「search_path = myschema、public」を使用してdbユーザーを設定しましたが、実行時にYiiがテーブル名でスキーマを検索し、そうでない場合は、追加の構成なしでは移行を使用できません。提供されたものはdefaultSchemaにフォールバックするため、データベースユーザーのsearch_pathに何があっても、「public.migrations」が使用されます。

Yii2でデフォルトスキーマを設定する最良の方法は何ですか?スキーマ選択用に指定された構成パラメーターはありますか?結局のところ、各接続は1つのスキーマを使用するので、接続構成を介してそれを設定するとよいでしょう。

11
hserge

defaultSchemaを指定するには、db.phpのこのバリアントを試してください

return [
    'class' => 'yii\db\Connection',
    'dsn' => 'pgsql:Host=localhost;dbname=db_name', 
    'username' => 'db_username',
    'password' => 'db_password',
    'charset' => 'utf8',
    'schemaMap' => [
      'pgsql'=> [
        'class'=>'yii\db\pgsql\Schema',
        'defaultSchema' => 'public' //specify your schema here
      ]
    ], // PostgreSQL
];
23
user1852788