用whereHas两个表关联查询时,id超过100000关联不成功,小于100000可以。

用whereHas或者has进行两个表关联查询,关联字段id超过100000关联不成功,小于100000可以。with可以关联到。

public function user(){
  return $this->hasOne(User::class,'id','user_id')->withTrashed();
}

$data=Store::query();
$data->with('user');
$data->whereHas('user',function($query){
$query->where('status',0);
});
return $data->count();

Tips:两个表不在同一个服务器上

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

with 是分两条语句查询的,会分别连接对应的数据库,所以没问题。而 whereHashas 是一条语句执行完,但两个表在两个服务器,所以会有问题

3年前 评论
讨论数量: 4

会不会是你 status 字段的条件影响了, 先看看原始的 sql 语句是否能查询到数据

select  * from stores where exists (select * from users where stores.user_id = users.id and status = 0) and deleted_at is null
3年前 评论
夏虫语冰 (楼主) 3年前
circle

where has 跨服务器有坑

3年前 评论

with 是分两条语句查询的,会分别连接对应的数据库,所以没问题。而 whereHashas 是一条语句执行完,但两个表在两个服务器,所以会有问题

3年前 评论

这个问题是id超过100000关联不到,还是whereHas/has和with的机制问题 导致关联不到?

3年前 评论
夏虫语冰 (楼主) 3年前

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