Laravel 拉威尔通过不工作来建立雄辩的关系秩序

Laravel 拉威尔通过不工作来建立雄辩的关系秩序,laravel,laravel-5,eloquent,Laravel,Laravel 5,Eloquent,我存储事件和事件时间表是两个不同的表。我按事件时间表日期升序显示事件。我使用了下面的查询,它不能正确显示 $eventslist=Events::with(['eventschedule' => function($query) { $query->orderBy('eventdate', 'ASC'); }])->paginate($this->recordsperpage); 事件模型中: public function eventschedule(){

我存储事件和事件时间表是两个不同的表。我按事件时间表日期升序显示事件。我使用了下面的查询,它不能正确显示

 $eventslist=Events::with(['eventschedule' => function($query) {  $query->orderBy('eventdate', 'ASC'); }])->paginate($this->recordsperpage);
事件模型中:

public function eventschedule(){

        return $this->hasMany('App\Eventshcedule','events_id','id')->orderBy('eventdate', 'ASC');

    }


我需要按日期显示事件结束。

您可以尝试下面的查询吗

$eventslist = Events::whereHas('eventschedule')->orderBy('eventdate')->paginate($this->recordsperpage);

你能试试下面的查询吗

$eventslist = Events::whereHas('eventschedule')->orderBy('eventdate')->paginate($this->recordsperpage);
function($query){$query->orderBy('eventdate','ASC')
将按升序而不是其父级
event
对计划进行排序

鉴于您的活动有多个日程安排,您需要选择最早的日程安排,然后按照该日程安排活动

将返回所需结果的后续查询是:

$eventScheduleTableName = App\Eventshcedule::getTable();

//Query fetches the schedules with the earliest dates
$minEventScheduleQuery = App\Eventshcedule::query()
                        ->select('id', DB::raw ('MIN(eventdate) as minEventDate'))
                        ->groupBy('id');

//Event query joins on schedule query, which allows an ordering by earliest schedule dates
//function `joinSub` is available as from laravel 5.6

$eventResult = Event::query()
                ->joinSub($minEventScheduleQuery, 'eventSchedule', function ($join) {
                    $join->on(Event::getQualifiedKeyName(),'=', "eventSchedule." Event::eventsschedule()->getForeignKey());
                })
                ->orderBy('eventSchedule.minEventDate', 'ASC')
                ->paginate($this->recordsperpage);
function($query){$query->orderBy('eventdate','ASC')
将按升序而不是其父级
event
对计划进行排序

鉴于您的活动有多个日程安排,您需要选择最早的日程安排,然后按照该日程安排活动

将返回所需结果的后续查询是:

$eventScheduleTableName = App\Eventshcedule::getTable();

//Query fetches the schedules with the earliest dates
$minEventScheduleQuery = App\Eventshcedule::query()
                        ->select('id', DB::raw ('MIN(eventdate) as minEventDate'))
                        ->groupBy('id');

//Event query joins on schedule query, which allows an ordering by earliest schedule dates
//function `joinSub` is available as from laravel 5.6

$eventResult = Event::query()
                ->joinSub($minEventScheduleQuery, 'eventSchedule', function ($join) {
                    $join->on(Event::getQualifiedKeyName(),'=', "eventSchedule." Event::eventsschedule()->getForeignKey());
                })
                ->orderBy('eventSchedule.minEventDate', 'ASC')
                ->paginate($this->recordsperpage);

我认为你的问题是对的,那么你认为它错在哪里呢?你能给出一个答案吗example@TsaiKoga我编辑并更新了问题你能发布你的查看代码吗?因为我不确定其中一张卡片是否是事件或事件日程表我认为你的查询是正确的,那么你认为它错了什么?你能给出一个答案吗example@TsaiKoga我编辑并更新了问题ncan你可以发布你的查看代码吗?因为我不确定其中一张卡是事件还是事件日程表$events\u id是未定义的变量
whereHas('eventschedule',函数($q)use($events\u id){$q->where('id',$events\u id);})
只是在
事件模型中具有关系的别名。不幸的是,结果将保持不变。$events\u id是未定义的变量
whereHas('eventschedule',function($q)use($events\u id){$q->where('id',$events\u id);})
只是在
事件
模型中具有关系的别名。不幸的是,结果将保持不变。