为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel Eloquent 如何对输出的“with”数据应用条件?

Laravel Eloquent 如何对输出的“with”数据应用条件?

PHP
慕姐8265434 2022-07-16 10:02:09
这是我的代码:$prestations = Prestation::with(            [            'service' => function($service) use($searchService) {                $service->select(['id','name'])->where('name', 'regexp', "/$searchService/i");            },            'facility' => function($facility) use($searchPartenaire) {                $facility->select(['id','name'])->where('name', 'regexp', "/$searchPartenaire/i");            }            ]        )            ->where('name', 'regexp', "/$search/i")            ->orderBy($orderBy, $orderDirection)            ->simplePaginate(50);        $res = [            'results' => $prestations,            'total' => Prestation::all()->count(),        ];问题在于,在 $searchService 和 $searchPartenaire 上“服务”和“设施”名称不相等的所有数据的输出中,值被“空”替换。所以我不想在搜索变量不等于的输出中有值。
查看完整描述

3 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

你可以试试这样


 $prestations = Prestation::with('service','facility');


        $prestations->whereHas('service', function ($query) use ($searchPartenaire) {

            $query->Where('name', 'like', '%' . $searchPartenaire . '%');

        });


        $prestations->whereHas('facility', function ($query) use ($searchPartenaire) {

            $query->Where('name', 'like', '%' . $searchPartenaire . '%');

        });


        $prestations->where('name', 'like', '%'.$search.'%')

            ->orderBy($orderBy, $orderDirection)

            ->simplePaginate(50);


        return $res = [

            'results' => $prestations,

            'total' => Prestation::all()->count(),

        ];

第一次创建Prestation实例 $prestations = Prestation::with('service','facility')


然后应用条件这是搜索的好方法


查看完整回答
反对 回复 2022-07-16
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

我最终找到了一个非常相似的解决方案:


$prestations = Prestation::with('service','facility')

            ->whereHas('service', function ($query) use ($searchService) {

            $query->where('name', 'regexp', "/$searchService/i");

            })  

            ->whereHas('facility', function ($query) use ($searchPartenaire) {

                $query->where('name', 'regexp', "/$searchPartenaire/i");

            })

                ->where('name', 'regexp', "/$search/i")

                ->orderBy($orderBy, $orderDirection)

                ->simplePaginate(50); 


        $res = [

            'results' => $prestations,

            'total' => Prestation::all()->count(),

        ];

谢谢你的帮助。


查看完整回答
反对 回复 2022-07-16
?
青春有我

TA贡献1784条经验 获得超8个赞

这是我在 Kamlesh Paul 建议后的代码:


$prestations = Prestation::with('service','facility');


        $prestations->whereHas('service', function ($query) use ($searchService) {

            $query->where('name', 'regexp', "/$searchService/i");

        });


        $prestations->whereHas('facility', function ($query) use ($searchPartenaire) {

            $query->where('name', 'regexp', "/$searchPartenaire/i");

        });


        $prestations->where('name', 'regexp', "/$search/i")

            ->orderBy($orderBy, $orderDirection)

            ->simplePaginate(50);


        $res = [

            'results' => $prestations,

            'total' => Prestation::all()->count(),

        ];


        return $res;

但是有无限的http请求调用,我认为问题是当哪里找不到相同的名称时,有人有建议吗?谢谢。


查看完整回答
反对 回复 2022-07-16
  • 3 回答
  • 0 关注
  • 94 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信