使用关系对Laravel Eloquent模型中的搜索结果进行排序

时间:2018-10-10 12:38:18

标签: laravel-5 eloquent

我搜索了模型(启动),下一步是按DESC或ASC排序搜索结果(现在不重要了)

我当前的代码是:

$startups = Startup::whereHas('category', function ($query) use ($search, $sort_type) {
            $query

                ->where('name', 'like', "%$search%")
                ->orderBy('name', $sort_type);
        })
            ->orWhere('description', 'LIKE', "%$search%")
            ->orWhere('url', 'LIKE', "%$search%")
            ->get();

        return StartupResource::collection($startups);

代码说明: 正如您在一开始所看到的,我正在使用“ whereHas”在相关模型“类别”中搜索巧合。 然后在“ whereHas”内部,我试图应用“ orderBy('name',$ sort_type)',但是它不能正常工作(它不能按类别排序)

我知道我们可以在Startup模型中创建方法并将其在方法内部排序,但是问题是我必须将变量传递给方法($ sort_type,$ search),我不知道该怎么做

那么在我的情况下,如何通过ASC或DESC对包括相关类别模型在内的Startups模型进行排序?

非常感谢你们的任何想法和帮助!

1 个答案:

答案 0 :(得分:0)

whereHas()无法实现。您可以使用JOIN

$startups = Startup::select('startups.*')
    ->join('category', 'category.id', '=', 'startups.category_id')
    ->where('category.name', 'LIKE', "%$search%")
    ->orWhere('startups.description', 'LIKE', "%$search%")
    ->orWhere('startups.url', 'LIKE', "%$search%")
    ->orderBy('category.name', $sort_type)
    ->get();