Laravel7 怎么跨库联合查询,急急急!

解决后有酬谢!扣扣78398983

数据库1:Me_MuOnline

表:MEMB_INFO

字段:memb___id 存储的是账号

数据库2:MuOnline

表:Character

字段:AccountID 存储的是账号

字段:Name 存储的是账号下的角色名

怎么样才能联合查询,通过数据库1Me_MuOnline.MEMB_INFO.memb___id下的账号zzzz

去查找数据库2:MuOnline.Character.AccountID 里面zzzzz的角色名,如果有那就符合条件就输出

比如Me_MuOnline.MEMB_INFO.memb___id 这个账号:zzzzzzzzzz,那么查找

MuOnline.Character.AccountID 里面的:zzzzzzzzzz账号下的角色名并且输出角色名

        // 查询对应分区账号
        $account = DB::connection('Me_MuOnline'. $_GET['serverCode'] .'')->table('MEMB_INFO')
            ->leftJoin('MEMB_STAT', 'MEMB_INFO.memb___id', '=','MEMB_STAT.memb___id' )
            ->select('MEMB_INFO.memb___id','MEMB_STAT.ConnectStat','MEMB_STAT.IP','MEMB_STAT.ConnectTM','MEMB_STAT.DisConnectTM')
            ->get();

        // ----------等级排行----------------------------------------------------
        // 获取角色信息
        $character = DB::connection('MuOnline')->table('Character')
            ->leftJoin('AccountCharacter', 'Character.AccountID', '=','AccountCharacter.Id' )
            ->select('Character.AccountID', 'Character.Name', 'Character.Class', 'Character.cLevel','Character.mLevel', 'Character.RESETS', 'Character.Strength', 'Character.Dexterity','Character.Vitality', 'Character.Energy', 'Character.Leadership','Character.MapNumber','Character.MapPosX','Character.MapPosY','AccountCharacter.GameIDC')
            ->whereIn('Character.Class', $classCode)
            ->where(function ($query) {
                $query->orWhere('Name', 'like', '%' . @$_GET['search'] . '%');
            })
            ->orderBy('RESETS', 'desc')
            ->orderBy('mLevel', 'desc')
            ->orderBy('cLevel', 'desc')
            ->paginate(50)
            ->withPath('?serverCode=' . $_GET['serverCode'] . '&type=level&class=' . @$_GET['class'] . '&search=' . @$_GET['search'] . '');
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 6

database 配置

file

模型

file

3年前 评论
tangyi90 (楼主) 3年前
一个人的江湖 (作者) 3年前
tangyi90 (楼主) 3年前
小烦 3年前
小烦 3年前

在config/database.php里面增加数据库2的配置,然后在模型使用connection指定要连接的数据库,这样就能使用ORM进行操作了。

3年前 评论
tangyi90 (楼主) 3年前

会使用模型关联吗,模型关联可以自动切换不同数据库连接的

3年前 评论

在你需要连接的表前加上连接名即可

$account = DB::connection('Me_MuOnline'. $_GET['serverCode'] .'')->table('MEMB_INFO')
            ->leftJoin('MuOnline.MEMB_STAT', 'MEMB_INFO.memb___id', '=','MuOnline.MEMB_STAT.memb___id' )
            ->select('MEMB_INFO.memb___id','MEMB_STAT.ConnectStat','MEMB_STAT.IP','MEMB_STAT.ConnectTM','MEMB_STAT.DisConnectTM')
            ->get();
3年前 评论
tangyi90 (楼主) 3年前
pan_zoe (作者) 3年前
tangyi90 (楼主) 3年前
pan_zoe (作者) 3年前

如果数据库在一个服务器上的话:

DB::table('Me_MuOnline.MEMB_INFO as a')
    ->leftJoin('MuOnline.Character as b', function ($query) {
        $query->on('a.memb___id', '=', 'b.AccountID');
    })
    ->paginate(50);
3年前 评论
tangyi90 (楼主) 3年前
看上隔壁小花了啦 (作者) 3年前
看上隔壁小花了啦 (作者) 3年前
tangyi90 (楼主) 3年前
自由与温暖是遥不可及的梦想
$db = config('database.connections.mysql.database');
$db2 = config('database.connections.mysql2.database');
$query = A::query();
$query->where('id',2);
$query->whereExists(functuon($builder) use ($db,$db2){
  $builder->from(DB::row('`'.$db2.'`.table'))->where(DB::raw('`'.$db.'`.a.id'), DB::raw('id'))->where('name','123')
})

dd($query->get())

// 以上方式我手写的  需要 楼主自己调试 这个方法 会有一定的性能损耗
// 并且需要在同一个连接里面 不能进行跨连接 除非源生sql
3年前 评论

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