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

这是我的代码:


$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 上“服务”和“设施”名称不相等的所有数据的输出中,值被“空”替换。所以我不想在搜索变量不等于的输出中有值。


慕姐8265434
浏览 97回答 3
3回答

LEATH

你可以试试这样 $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')然后应用条件这是搜索的好方法

潇潇雨雨

我最终找到了一个非常相似的解决方案:$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(),        ];谢谢你的帮助。

青春有我

这是我在 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请求调用,我认为问题是当哪里找不到相同的名称时,有人有建议吗?谢谢。
打开App,查看更多内容
随时随地看视频慕课网APP