跨多个数据库无法查询

一直在本地操作,用的是127.0.0.1 下创建了2个数据库, 然后使用了跨库查询,语句大概是这个样子的:

$query = DB::connection('aaa')->table('shop_goods as g')->select(DB::raw('b.*'))->leftJoin(DB::raw('bbb.goods as b'),'g.sg_id','=',DB::raw('b.sg_id'))->get();

数据库aaa中的shop_goods表连表查询数据库bbb中的goods表,该条语句是可以正常查询的,但是,现在两个数据库在阿里云的两个不同的数据库连接中,再用此方法查询,提示找不到数据库bbb,
难道只支持同一个数据库连接下才能跨库查询,不同的数据库连接无法跨库查询么? 在线请教 ….

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

跨RDS连表应该是不行的

1年前 评论
HinataiLiang (楼主) 1年前
讨论数量: 27

可以跨库查询,在模型文件定义 protected $connection = “mysql”,然后用模型去查询就行

1年前 评论
HinataiLiang (楼主) 1年前
oceanjiayu (作者) 1年前
HinataiLiang (楼主) 1年前
oceanjiayu (作者) 1年前
HinataiLiang (楼主) 1年前

配置多个数据库连接

class A extends Model
{
    protected $connection="pre";
    protected $table = 'A';

    public function B() {
        return $this->hasOne(B::class);
    }
}

class B extends Model
{
    protected $connection="local";
    protected $table = 'B';
}

$a = A::find(1);
dd($a, $a->B);
1年前 评论
HinataiLiang (楼主) 1年前
IDLIFE (作者) 1年前
HinataiLiang (楼主) 1年前
HinataiLiang (楼主) 1年前
IDLIFE (作者) 1年前
IDLIFE (作者) 1年前
Mutoulee

相当于阿里云两个数据库实例中,中间要经过网关、安全组、用户及权限等等,所以我认为是不可行的。

1年前 评论
fatrbaby 5个月前

你这条数据本身就是一个数据库链接而已,估计这样连接不上。可能需要用到两个链接的。 最好用orm 然后每个model定义一下connection

1年前 评论

跨RDS连表应该是不行的

1年前 评论
HinataiLiang (楼主) 1年前

可以理解为两个rds实例关联,也就是两台服务器了,肯定是有解决方案,不知道这个能不能解决你的问题blog.csdn.net/weixin_43970890/arti...

1年前 评论
fatrbaby

当然是不行的……

1年前 评论

原生SQL不行,
ORM应该可以。

1年前 评论
fatrbaby 1年前
sanders

可以考虑用,阿里云的数据同步服务(挺贵的),或者自己配置 datax 将数据同步到需要关联的数据库中。

1年前 评论

两个库的数据查询出来再组合该说可以的。连表一条语句这种估计不行

1年前 评论
Tab

两个数据库不行就弄三个数据库 数据库A 一个物理字段 数据库B 一个物理地址 数据库C (增量备份数据库A,B 至新的物理数据库)
数据库C此时包含 数据库A和B select * from db_1.temp left join db_2.temp

1年前 评论

这个需要设置库的访问权限

cmd,root 用户进入

// 查询数据库权限

SHOW GRANTS FOR 库名

// 赋予库名 2 对应 库名 1. 表名 的权限

GRANT 权限 ON 库名 1. 表名 to 库名 2

// 赋予库名 2 对应 库名 1. 表名 的权限

REVOKE 权限 ON 库名 1. 表名 FROM 库名 2

file

file

5个月前 评论

是的,设置下用户权限就可以了,在阿里云rds上账号增加另一个库的只读权限就可以。

1个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!