laravel whereHas 多数据库跨库查询问题 各位大佬快看看
使用版本 laravel8+
A 数据库
namespace App\Models\User;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class User extends Model{
use HasFactory;
protected $connection = 'a';
protected $table = 'users';
}
B 数据库
namespace App\Models\Order;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Order extends Model{
use HasFactory;
protected $connection = 'b';
protected $table = 'order';
public function user()
{
return $this->belongsTo(User::class);
}
}
查询
use Illuminate\Database\Eloquent\Builder;
$query = Order::query()->where('goods_id',2);
$query->whereHas('user',functon(Builder $builder) use ($data){
$builder->where('mobile','LIKE','%'.$data['mobile].'%');
})
$query->paginate();
以上应用场景 及代码
A 库 有 表前缀 B库 也有表前缀
A库前缀 a_
B库前缀 b_
问题 进行 whereHas 的时候 会走 A 库的连接 不会走B 库的 及表前缀
敢问各位大佬 有何方法解决
查询会失败
(SQL: select count(*) as aggregate from `b_order` where b_order.goods_id = 2 and exists (select * from `b_users` where `b_order`.`user_id` = `b_users`.`id` and `mobile` LIKE %153%)
laravel 会自动使用B的前缀
预期 sql
SELECT * FROM b.b_order WHERE b.b_order.goods_id = 2 EXISTS(SELECT * FROM a.a_users WHERE b.b_order.user_id = a.a_user_id AND a.a_user.`mobile` LIKE %153%)
推荐文章: