基于存在的关联查询不支持跨库吗?

post 表里关联 comments ,两个表位于不同数据库,基于存在的关联查找报错

$posts = App\Post::has('comments')->get();
Persevere,Vtr!
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

跨库关联使用has方法,解决办法

->whereHas('comments',function ($q){
       //跨库关联 使用has 必须指定关联表的库名
    return $q->from(config('database.connections.mysql.database').'.comments')->where('status',1);
})
5年前 评论
IvanCoacher 4年前
自由与温暖是遥不可及的梦想 3年前
讨论数量: 21
Complicated

支持吧,,我现在的项目就是这么写的,跨库没问题啊,只要model连接好就ok

5年前 评论

@Complicated 你试一下用has方法呢,针对跨库的

5年前 评论
Complicated

@若相惜 has方法是?

5年前 评论
AspireHe

支持跨库 以前用过 没啥问题 看看你的Model连接写好了没 最好再看看配置

5年前 评论
Mr_lemon 4年前

@AspireHe 关联查询没有问题,但是使用是否存在的查询好像不支持

5年前 评论
AspireHe

看下你的查询是否存在的代码

5年前 评论
$posts = App\Post::has('comments')->get();
5年前 评论

同问,跨库查询是否存在,提示表不存在?怎么解决,大佬们

5年前 评论

@Prince 感觉不行的,分开查吧

5年前 评论

@Prince 在config/database里面配置多个连接mysql连接
然后在model里面连接不同的mysql配置库就行
protected $connection = 'mysql_master';

5年前 评论

@若相惜 我刚试了,原生的sql语句可以查

5年前 评论

@helloBear 这样也是不行的,还是会报错表不存在。
基于存在的关联查询,转换成 sql 其实是个嵌套查询。因为两张表在不同的库,每个查询,会根据当前模型设定的connection 链接数据库,但是主表的 connection 不会显示出来(被省略);最后子查询拼接成一条 sql 的时候就会报错。

5年前 评论

跨库关联使用has方法,解决办法

->whereHas('comments',function ($q){
       //跨库关联 使用has 必须指定关联表的库名
    return $q->from(config('database.connections.mysql.database').'.comments')->where('status',1);
})
5年前 评论
IvanCoacher 4年前
自由与温暖是遥不可及的梦想 3年前

谷歌上也说了,跨库关键查询数据可以,但是用到whereHas来做条件筛选就不行了。

4年前 评论

@loveinalife 可以用上面仁兄提到的那样,带上库名

4年前 评论

也是不行的,

  $query->whereHas('member',function($q)use($request){
        $q->from(config('database.connections.mysql.database').'.member')
            ->where('spread_id',21);
        });

member是关联另外一个库的表。这样写的还是不支持。

4年前 评论

有解决方案吗?遇到同样的问题

4年前 评论
若相惜 (楼主) 4年前

两个库的表关联好像是不支持的

4年前 评论

跨库模型关联是ok的,指定connection就好了

4年前 评论

跨库查询可以 但是schedule(另一个库的表) 查询条件结果不会影响整个结果 怎么能让他影响整个结果呢

file

4年前 评论
自由与温暖是遥不可及的梦想 3年前

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