讨论数量:
可以关联起来查询的,写了个小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();
}
});
感谢楼上两位回复!
@lynne 你这个写法,应该不是关联模型了,只是从一个模型中查询数据,在遍历过程中查询另外一个模型。 能不能用那种链式的写法直接查询呢?
类似下面的写法
$mongo = new MongodbUser();
$mongo->all()->map(function($item){
return $item->mysqlUserProfile;
});
你的问题是对 orm 的不理解,你多看一下 orm 原理就是,把 sql 语句抽象成对象方法,你写的所有关联都必须是一个数据库下的 sql,不同的 collection 相当于不同的进程连接,不能使用关联模型的
@drinke9
trait HasRelationships.php 中的 newRelatedInstance
方法,首先可以说明两个类在关联时可以不是同一个数据库连接,应该也可以不是同种数据库。
其次,在功能上应该不适用于多对多,因为并没有地方对于中间表的连接做出限定,即你所提的问题,在没有中间表的情况下应该是满足的。(此为查看源码所得,没有实际操作,仅限参考)
再者,可以建立中间表模型继承 Pivot
,剩下的你懂了~
protected function newRelatedInstance($class)
{
return tap(new $class, function ($instance) {
if (! $instance->getConnectionName()) {
$instance->setConnection($this->connection);
}
});
}
推荐文章: