排序依据和分组依据 Laravel
Order by and Group by with Laravel
在我当前的代码中,我将 groupBy 用于特定列,而且我想按 order_no 对每个数组进行排序。使用我当前的代码,我得到:
"Method Illuminate\Database\Eloquent\Collection::orderBy does not
exist."
$courses = CourseTopic::select([
'course_topics.id',
'course_topics.course_id',
'course_topics.description',
'course_topics.visible',
'course_topics.name',
'course_activities.order_no',
'course_activities.activity_id',
'activity_types.table_name'
])
->where('course_id', $course_id)
->leftJoin('course_activities', 'course_activities.course_topic_id', 'course_topics.id')
->leftJoin('activity_types', 'activity_types.id', 'course_activities.activity_type_id')
->get()
->groupBy('id')
->orderBy('course_activities.order_no');
您在 get()
之后有了它们,这意味着它现在是一个集合查询,不再是一个 QueryBuilder 对象。有两种选择:
将它移到 get()
之前,以便 MySQL 进行排序和分组:
$courses = CourseTopic::select([
'course_topics.id',
'course_topics.course_id',
'course_topics.description',
'course_topics.visible',
'course_topics.name',
'course_activities.order_no',
'course_activities.activity_id',
'activity_types.table_name'
])
->where('course_id', $course_id)
->leftJoin('course_activities', 'course_activities.course_topic_id', 'course_topics.id')
->leftJoin('activity_types', 'activity_types.id', 'course_activities.activity_type_id')
->groupBy('course_topics.id')
->orderBy('course_activities.order_no')
->get();
或者使用sortBy,也就是Collection方式。您需要使用返回的列名而不是 MySQL 关系
$courses = CourseTopic::select([
'course_topics.id',
'course_topics.course_id',
'course_topics.description',
'course_topics.visible',
'course_topics.name',
'course_activities.order_no',
'course_activities.activity_id',
'activity_types.table_name'
])
->where('course_id', $course_id)
->leftJoin('course_activities', 'course_activities.course_topic_id', 'course_topics.id')
->leftJoin('activity_types', 'activity_types.id', 'course_activities.activity_type_id')
->get()
->groupBy('id')
->sortBy('order_no');
在我当前的代码中,我将 groupBy 用于特定列,而且我想按 order_no 对每个数组进行排序。使用我当前的代码,我得到:
"Method Illuminate\Database\Eloquent\Collection::orderBy does not exist."
$courses = CourseTopic::select([
'course_topics.id',
'course_topics.course_id',
'course_topics.description',
'course_topics.visible',
'course_topics.name',
'course_activities.order_no',
'course_activities.activity_id',
'activity_types.table_name'
])
->where('course_id', $course_id)
->leftJoin('course_activities', 'course_activities.course_topic_id', 'course_topics.id')
->leftJoin('activity_types', 'activity_types.id', 'course_activities.activity_type_id')
->get()
->groupBy('id')
->orderBy('course_activities.order_no');
您在 get()
之后有了它们,这意味着它现在是一个集合查询,不再是一个 QueryBuilder 对象。有两种选择:
将它移到 get()
之前,以便 MySQL 进行排序和分组:
$courses = CourseTopic::select([
'course_topics.id',
'course_topics.course_id',
'course_topics.description',
'course_topics.visible',
'course_topics.name',
'course_activities.order_no',
'course_activities.activity_id',
'activity_types.table_name'
])
->where('course_id', $course_id)
->leftJoin('course_activities', 'course_activities.course_topic_id', 'course_topics.id')
->leftJoin('activity_types', 'activity_types.id', 'course_activities.activity_type_id')
->groupBy('course_topics.id')
->orderBy('course_activities.order_no')
->get();
或者使用sortBy,也就是Collection方式。您需要使用返回的列名而不是 MySQL 关系
$courses = CourseTopic::select([
'course_topics.id',
'course_topics.course_id',
'course_topics.description',
'course_topics.visible',
'course_topics.name',
'course_activities.order_no',
'course_activities.activity_id',
'activity_types.table_name'
])
->where('course_id', $course_id)
->leftJoin('course_activities', 'course_activities.course_topic_id', 'course_topics.id')
->leftJoin('activity_types', 'activity_types.id', 'course_activities.activity_type_id')
->get()
->groupBy('id')
->sortBy('order_no');