asialong 2015-12-22 15:22:38 7353次浏览 1条回复 3 0 0

我本地库有一张表是存有N个远程数据库配置的,一行一个库 有什么方法可以读取到远程库中的表,然后用ActiveDataProvider分页组件显示呢?

  • 回复于 2015-12-22 15:59 举报
    
    $dsn = 'select from config db table';
    $db = new Connection($dsn);
    $provider = new ActiveDataProvider([
           'db' => $db,
           'query' => Post::find(),
           'pagination' => [
              'pageSize' => 20,
           ],
    ]);
    

    大概类似这样,你可以通过数据库配置表构造远程数据库的$dsn,然后构造一个Connection对象连接远程数据库,然后,将这个对象传给DataProvider即可。

    8 条回复
    回复于 2015-12-22 16:44 回复

    'query' => Post::find(), 这个地方我想就是读远程数据库的表,这样写的话,会提示,The table does not exist: ........ 就是该表不存在

    回复于 2015-12-22 17:07 回复

    你这里传入的是一个QueryInterface的实例么? 如果你构造了$db对象,这里是会传入的:$query->all($this->db)

    回复于 2015-12-22 17:13 回复

    $apiweb = new ApiWeb;

        $connection = $apiweb->getDatabase($webid);
        
        $query = (new Query())->from('cm_category');   //这个地方可以用Post::find() 这样的方式来读取远程表吗?
        $dataProvider = new ActiveDataProvider([
            'db' => $connection,
            'query' => $query,
            'pagination' => [
                'pageSize' => 20,
            ]
        ]);
    
    回复于 2015-12-22 17:52 回复

    model和具体的数据库连接无关的。Post::find()返回的也是一个Query,函数里面做的事情跟你的new Query那一行差不多

    回复于 2015-12-22 17:57 回复

    这个知道,这样,打个比方,我读远程库AA下的B 表,那这个B表,我能不能在本地backend\modules\B\models 下面做一个B.php的model 我刚才这样做了一个 ,然后里面

    public static function tableName()
        {
            return 'B';
        }
    

    这样子写,接着用 B::find() 这种方式来 获取,提示,不存在表

    回复于 2015-12-22 18:02 回复

    明白了,这是一个二选一的方式,对吧

    回复于 2015-12-22 18:16 回复

    是的,这两个实质上是一样的

    回复于 2015-12-23 09:13 回复

    好的,谢谢

您需要登录后才可以回复。登录 | 立即注册