请教一个关联查询问题

我的 User 模型一对一如下几个模型:

Card

  • id_card
  • name
  • sex

Info

  • mobile
  • xxx

……..

我想问的问题是,假如客户比较鸡蛋里挑骨头,他就要同时根据: cards 表里的 name字段
infos 表里的 mobile 字段来查询出用户。而且搜索框给出的搜索条件明显是两个不同的人。我是这样做的:

        $name = '司松'; // 这是用户1
        $mobile = '17154920634'; // 这里用户2
        $users = User::query()->with([
            'card' => function ($cardQuery)use($name) {
            $cardQuery->when(!empty($name),function($query) use ($name) {
                $query->where('name',$name);
            });
        },
            'information'=>function($infoQuery) use ($mobile) {
                $infoQuery->when(!empty($mobile),function ($query)use ($mobile) {
                   $query->where('mobile',$mobile);
                });
            }
        ])->get()->first();

但这样做貌似只能取出 with 条件里第一个用户。第二个取不出来。如果将 first()去掉,获取的将是所有人的数据。
请问大佬们有没有什么好的办法?我也是个菜鸡。
还有一个问题是。我现在只是模拟数据。将来上线后。数据量可能会特别大的。如果数据量大的时候。我取出所有人还是用 User 模型 with 其它模型吗吗?虽然这些模型都反向关联了 User模型.

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
leo
最佳答案

把两处 with 替换成 whereHas,with 就不是用来做筛选的

2年前 评论
浪里小白龙 (楼主) 2年前
讨论数量: 5

理论上应该是先定位好card表跟infos表再去with用户会比较合适

2年前 评论
leo

把两处 with 替换成 whereHas,with 就不是用来做筛选的

2年前 评论
浪里小白龙 (楼主) 2年前

先查询card 获取user_id。再去另外个表查 mobile获取user_id、再去user表里面查询

2年前 评论
sunny123456 2年前

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