2019-03-18 14:52:03 1665次浏览 3条回答 0 悬赏 10 金钱

请问一下 Yii 2.0 项目中使用了 5 个数据库,如何跨库跨表查询呢?有木有比较简便的方法呢?

  • 回答于 2019-03-18 15:12 举报

    覆写model getDb()

    , 觉得很赞
  • 回答于 2019-03-19 09:13 举报

    新增一个 db 连接

    'components' => [
        'db' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=localhost;dbname=test',
            'username' => '***',
            'password' => '**',
            'charset' => 'utf8',
        ],
        'db2' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=localhost;dbname=test2',
            'username' => '***',
            'password' => '***',
            'charset' => 'utf8',
        ],
    ],
    

    然后在模型中指定连接 实现 getDb() 方法

    /**
     * {@inheritdoc}
     */
    public static function tableName()
    {
        return 'post';
    }
    
    /**
     * @return \yii\db\Connection the database connection used by this AR class.
     */
    public static function getDb()
    {
        return Yii::$app->get('db2');
    }
    

    还可以使用 gii 生成模型 指定下 Database Connection IDdb2 就好

    至于用法和以前的 AR 类没有区别。

    3 条回复
    回复于 2019-03-19 09:23 回复

    public static function tableName()
    {

    return 'test2';
    

    }

    这个tablename不应该是数据表的名字么,你怎么写的是数据库的名字呢?

    回复于 2019-03-19 09:24 回复

    你纠结这个干嘛,是表名........

    回复于 2019-03-19 09:26 回复

    哦哦,好的

    觉得很赞
  • 回答于 2019-03-19 13:51 举报
    对上面的进行补充
    public static function tableName()
    {
        preg_match("/dbname=([^;]+)/i", static::getDb()->dsn, $matches);
        return $matches[1] . '.' . 'TABLENAME';
    }
    
    
    
您需要登录后才可以回答。登录 | 立即注册
PHP学院的中学生
副总裁

PHP学院的中学生

注册时间:2018-10-23
最后登录:2024-04-07
在线时长:168小时1分
  • 粉丝29
  • 金钱4730
  • 威望30
  • 积分6710

热门问题