我如何在查询中订购关系列?
例如我有一个$ order变量,其中包含'title.asc'之类的内容,然后它会爆炸并通过控制器发送到模型中的查询,我分别使用$ order [0]和$ order [1]但是如果列在急切加载的关系表上,我怎么能用它?
public function scopeEvents($query, $order, $course, $supplier, $city, $venue, $eventStatus, $tutor)
{
$date = date('Y-m-d');
$query->where('active', 1)
->with('course', 'venue', 'supplier', 'eventType', 'eventStatus', 'tutor', 'delegates')
->where('start_date', '>=', $date)
->orderBy($order[0], $order[1]);
if ( ! empty($course[0]))
{
$query = $query->whereIn('course_id', $course);
}
if ( ! empty($supplier[0]))
{
$query = $query->whereIn('supplier_id', $supplier);
}
if ( ! empty($venue[0]))
{
$query->whereIn('venue_id', $venue);
}
if ( ! empty($event_status[0]))
{
$query->whereIn('event_status_id', $eventStatus);
}
if ( ! empty($tutor[0]))
{
$query->whereIn('tutor_id', $tutor);
}
}
目前我刚找到一个未找到的列,这是可以预期的。
答案 0 :(得分:1)
为了减少加载时间,同时还能够通过相关的表列进行排序,我必须将预先加载与连接相结合,并使用连接进行排序和预先加载以在视图中显示数据。似乎运作良好。
public function scopeEvents($query, $order, $course, $supplier, $city, $venue, $eventStatus, $tutor)
{
$date = date('Y-m-d');
$query->where('active', 1)
->with('course', 'venue', 'supplier', 'eventType', 'eventStatus', 'tutor', 'delegates')
->leftJoin('courses', 'courses.id', '=', 'events.course_id')
->leftJoin('suppliers', 'suppliers.id', '=', 'events.supplier_id')
->leftJoin('venues', 'venues.id', '=', 'events.venue_id')
->leftJoin('event_types', 'event_types.id', '=', 'events.event_type_id')
->leftJoin('event_statuses', 'event_statuses.id', '=', 'events.event_status_id')
->leftJoin('tutors', 'tutors.id', '=', 'events.tutor_id')
->select('events.*', DB::raw("concat(tutors.first_name,' ',tutors.last_name) as tname"), 'event_statuses.status', 'event_types.type', 'venues.name as vname', 'suppliers.name as sname', 'courses.title', 'venues.city')
->where('start_date', '>=', $date)
->orderBy($order[0], $order[1]);
if ( ! empty($course[0]))
{
$query = $query->whereIn('course_id', $course);
}
if ( ! empty($supplier[0]))
{
$query = $query->whereIn('supplier_id', $supplier);
}
if ( ! empty($venue[0]))
{
$query->whereIn('venue_id', $venue);
}
if ( ! empty($event_status[0]))
{
$query->whereIn('event_status_id', $eventStatus);
}
if ( ! empty($tutor[0]))
{
$query->whereIn('tutor_id', $tutor);
}
}