我正在使用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表)
如何设置其他架构?我做错了什么?
答案 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