【问题标题】:How to sort a query based on a hasmany value with containing search and pagination如何基于包含搜索和分页的 hasmany 值对查询进行排序
【发布时间】:2021-06-27 18:14:43
【问题描述】:

我有一个包含许多 EventDate 的事件模型。 我正在运行一个查询(针对我的 livewire 数据表),在其中我使用媒体和事件日期获取事件。我根据是否选择了一年和/或一个月来限制结果。还有一个文本搜索。最后我对结果进行分页。

此查询和过滤器工作正常。但我不知道如何根据事件日期对事件列表进行排序。我希望结果以降序列出事件日期。 (这可以限制为 ->first() 事件日期(以防有多个)

我怎样才能做到这一点?

$events = Event::with('media', 'eventdates')->whereHas('eventdates', function (Builder $query) {

         $query
                    ->when($this->month > 0, function ($query) {

                        return $query
                            ->whereMonth('date', $this->month);

                    })
                    ->when($this->year > 0, function ($query) {

                         return $query
                             ->whereYear('date', $this->year);

                    });


    })->where('published', '1')->search($this->search)->paginate($this->perPage);

【问题讨论】:

  • 您需要运行关系和原始查询来执行订单。
  • 您可以添加我的 Skype ID jesus.erwin.suarez143 我可以指导您。

标签: php eloquent laravel-8


【解决方案1】:

找到答案,以防对任何人有用

$events = Event::select('events.*')
        ->join('event_dates', 'event_dates.event_id', '=', 'events.id')
        ->whereHas('eventdates', function (Builder $query) {

            $query
                ->when($this->month > 0, function ($query) {

                    return $query
                        ->whereMonth('date', $this->month);

                })
                ->when($this->year > 0, function ($query) {

                    return $query
                        ->whereYear('date', $this->year);

                });


        })
        ->where('published', '1')
        ->search($this->search)
        ->orderBy('event_dates.date', 'desc')
        ->paginate($this->perPage);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多