我搜索了模型(启动),下一步是按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模型进行排序?
非常感谢你们的任何想法和帮助!
答案 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();