使用PostgreSQL在Yii Framework中设置非默认架构

时间:2014-04-29 01:52:28

标签: php postgresql yii database-schema

我正在使用Yii Framework和PostgreSQL,我需要在非默认架构中创建新模型。我怎样才能做到这一点? 我尝试了以下方法:

保护/组件/ PgSchemaConnection.php

class PgSchemaConnection extends CDbConnection {
  protected function initConnection($pdo)
  {
    parent::initConnection($pdo);
    $stmt=$pdo->prepare("set search_path to master, public");
    $stmt->execute();
  }
}

保护/配置/ main.php

return array(
    ...
    'db'=>array(
            'connectionString' => 'pgsql:host=localhost;dbname=bsc',
        'username' => 'aUser',
        'password' => 'aPass',
        'charset' => 'utf8',
            'class' => 'PgSchemaConnection'
        ),
    ...
)

但是当我在控制台中运行时

>> model Foo
Warning: the table 'Foo' does not exist in the database.
   generate models/relatedobjective.php
PHP Warning:  Invalid argument supplied for foreach() in /home/cristhian/php_apps/yii-1.1.14.f0fee9/framework/cli/views/shell/model/fixture.php on line 13
PHP Warning:  Invalid argument supplied for foreach() in /home/cristhian/php_apps/yii-1.1.14.f0fee9/framework/cli/views/shell/model/fixture.php on line 19
   generate fixtures/relatedobjective.php
   generate unit/relatedobjectiveTest.php

The following model classes are successfully generated:
    relatedobjective

If you have a 'db' database connection, you can test these models now with:
    $model=relatedobjective::model()->find();
    print_r($model);

Yii没有在数据库中找到表Foo(Obiously,我已经创建了Foo表)

如何设置其他架构?我做错了什么?

2 个答案:

答案 0 :(得分:3)

只提供表格的完整路径 - 包括架构名称。

使用gii,我将'tableName'字段设置为'schemaName.tableName'。

您的模型将如下所示:

class MyModel extends CActiveRecord{
    ...
    tableName(){
        return 'schemaName.tableName';
    }

此模型将使用您的默认“db”连接配置执行查询。

答案 1 :(得分:0)

您必须更改该模型的数据库连接,

您可以覆盖该模型的getDbConnection()以使用其他连接:

public function getDbConnection()
{
    return Yii::app()->dbPostgre;
}

现在将此连接添加到config/main.php

中的主数据库连接下方
'dbPostgre' => array(
    'connectionString' => 'pgsql:host=localhost;dbname=bsc',
    'class'=>'CDbConnection',
    'username' => 'aUser',
    'password' => 'aPass',
    'charset' => 'utf8',
        'class' => 'PgSchemaConnection'
    ),
),

现在你好了,

但有一点,如果您想使用gii从该数据库生成模型,请暂时将 dbPostgre 的名称更改为 db