首先说明下db的设计:
有两个db,分别是daogou和member,在daogou db里有dg_goods
表,在member db里没有dg_goods
表。
然后贴上db配置main.php:
‘components’=>array(
[color="#FF0000"][b]'db'[/b][/color]=>array( //主连接,注意主连接的db为member,似乎从连接会依赖它,导致出现问题。
'class' => 'CDbConnection',
'connectionString' => 'mysql:host=localhost;port=3309;dbname=[color="#8B0000"]member[/color]',
'emulatePrepare' => true,
'username' => 'root',
'password' => '*****',
'charset' => 'utf8',
),
[color="#FF0000"][b]'daogou'[/b][/color]=>array( //从连接 daogou,注意不管从连接的dbname设为什么,都没用,依赖主连接。
'class' => 'CDbConnection',
'connectionString' => 'mysql:host=localhost;port=3309;dbname=daogou',
'emulatePrepare' => true,
'username' => 'root',
'password' => '*****',
'charset' => 'utf8',
),
[color="#FF0000"][b]'member'[/b][/color]=>array( //从连接 member
'class' => 'CDbConnection',
'connectionString' => 'mysql:host=localhost;port=3309;dbname=member',
'emulatePrepare' => true,
'username' => 'root',
'password' => '*****',
'charset' => 'utf8',
),
)
下面是model Job.php:
class Job extends CActiveRecord
{
public static function model($className=__CLASS__)
{
return parent::model($className);
}
public function tableName()
{
return 'dg_goods'; //存在于daogou db
}
public function get()
{
$conn = Yii::app()->daogou;
var_dump($conn); //
}
}
按照正常来说,应该会打印出$conn对象。但是事实上报错,错误信息如下:
[color="#FF0000"]The table "dg_goods" for active record class "Job" cannot be found in the database.[/color]
在database daogou
明明存在 dg_goods
表,然后我把主连接的dbname修改为daogou:
'db'=>array(
'class' => 'CDbConnection',
'connectionString' => 'mysql:host=localhost;port=3309;dbname=[color="#8B0000"]daogou[/color]',
'emulatePrepare' => true,
'username' => 'root',
'password' => '*****',
'charset' => 'utf8',
),
就可以正确打印出$conn对象:
object(CDbConnection)#53 (22) {
["connectionString"]=>string(44) "mysql:host=localhost;port=3309;dbname=daogou"
["username"]=>string(4) "root"
…
}
我把从连接daogou 的dbname去掉:
'daogou'=>array(
'class' => 'CDbConnection',
'connectionString' => 'mysql:host=localhost;port=3309;dbname=',
'emulatePrepare' => true,
'username' => 'root',
'password' => '*****',
'charset' => 'utf8',
),
依然可以打印出$conn对象:
object(CDbConnection)#53 (22) {
["connectionString"]=>string(38) "mysql:host=localhost;port=3309;dbname="
["username"]=>string(4) "root"
…
}
dbname允许为空?
而且必须有个叫"db"的主连接,删掉或者修改为其他名称后又报错:
CDbConnection.connectionString cannot be empty.
实在弄不明白Yii的多数据库连接原理,现在用的是1.1.4版本,急切需要多数据库连接,哪位帮忙看看如何解决。