Laravel Eloquent 如何在输出的 "with" 数据上应用条件?

Laravel Eloquent How to apply condition on "with" datas on the output?

这里是我的代码:

$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 上 "service" 和 "facility" 名称不相等的所有数据的输出中,值被 "null" 替换。 所以我不想在搜索变量不等于的输出中有值。

谢谢。

你可以这样试试

 $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')

实例

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

这是我根据 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请求调用,我认为问题是当在哪里找不到相同的名称时,有人有建议吗? 谢谢

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

$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(),
        ];

感谢您的帮助。