【问题标题】:Sort a result of search in Laravel Eloquent model with relations使用关系对 Laravel Eloquent 模型中的搜索结果进行排序
【发布时间】:2019-03-15 09:07:10
【问题描述】:

我搜索了一个模型(启动),下一步是按 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 模型(包括相关 Category 模型)进行排序?

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

【问题讨论】:

  • categoryBelongsTo 关系吗?每个创业公司都有一个类别吗?
  • 一个类别可以有很多 Startups :)
  • 这并不能真正回答我的问题,尤其是第二个问题。
  • 每个创业公司都有一个类别,所以是的,它确实如此:)

标签: laravel-5 eloquent


【解决方案1】:

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();

【讨论】:

    猜你喜欢
    • 2021-02-10
    • 2019-12-22
    • 2019-07-17
    • 2015-03-27
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    相关资源
    最近更新 更多