请教一个关联查询问题

我的 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模型.

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
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年前

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