Laravel 模型关联不同数据库之间能否使用关联模型?

假如有系统中有两个数据表一个是mysql,另外一个是mongodb。这两个表可否关联起来查询呢?

面向Google编程
drinke9
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 7

!!! 如果原生实现不了的,laravel也无能为力

5年前 评论
  可以关联起来查询的,写了个小demo如下:
     $mongoCollection = DB::connection('mongodb')->collection('{此处是你mongodb的表名}');
     $mongoCollection->chunk(1000, function($users) {
            foreach ($users as $user) {
                $phone = $user['_id'];
                $br = {此处mysql的表名}::find($phone);
                $br->nm = $name;
                $br->save();
            }
        });
5年前 评论
drinke9

感谢楼上两位回复!
@lynne 你这个写法,应该不是关联模型了,只是从一个模型中查询数据,在遍历过程中查询另外一个模型。 能不能用那种链式的写法直接查询呢?
类似下面的写法

$mongo = new MongodbUser();
$mongo->all()->map(function($item){
  return $item->mysqlUserProfile;
});
5年前 评论

你的问题是对orm的不理解,你多看一下orm原理就是,把sql语句抽象成对象方法,你写的所有关联都必须是一个数据库下的sql,不同的collection相当于不同的进程连接,不能使用关联模型的

5年前 评论
linlancer 3年前

@drinke9
trait HasRelationships.php中的newRelatedInstance方法,首先可以说明两个类在关联时可以不是同一个数据库连接,应该也可以不是同种数据库。
其次,在功能上应该不适用于多对多,因为并没有地方对于中间表的连接做出限定,即你所提的问题,在没有中间表的情况下应该是满足的。(此为查看源码所得,没有实际操作,仅限参考)
再者,可以建立中间表模型继承Pivot,剩下的你懂了~

protected function newRelatedInstance($class)
    {
        return tap(new $class, function ($instance) {
            if (! $instance->getConnectionName()) {
                $instance->setConnection($this->connection);
            }
        });
    }
5年前 评论

都是可以的。需指定模型的connection。多对多的话需要自己建个中间表模型。以上!

5年前 评论

可以的。使用这个 jenssegers/mongodb 包很方便

4年前 评论

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