У меня есть следующее в моей модели Event в Laravel 4. Причина, по которой я использую QueryBuilder, а не Eloquent, - мне нужно иметь ссылки в каждом заголовке столбца в моей таблице результатов в моей view, чтобы при щелчке, закажите результаты в asc или desc на основе этого столбца.Заказ результатов из связанных таблиц в «Красноречиво» и сеансе
Проблема, с которой я столкнулась, заключается в том, что если я использую Eloquent, это не сработает, так как большая часть данных вытягивается через отношения к другим таблицам, поэтому Eloquent не может найти нужные столбцы/поля.
public static function getEvents($perPage = 10)
{
$order = Session::get('event.order', 'start_date.desc');
$order = explode('.', $order);
$columns = array(
'events.id as id',
'title',
'locations.city as city',
'suppliers.name as supplier_name',
'venues.name as venue_name',
'start_date',
'courses.price as course_price',
'type',
'status',
'max_delegates as availability',
'tutors.first_name as tutor_first_name',
'tutors.last_name as tutor_last_name',
'contacts.first_name as d_first_name'
);
$events = DB::table('events')
->leftJoin('courses', 'course_id', '=', 'courses.id')
->leftJoin('suppliers', 'supplier_id', '=', 'suppliers.id')
->leftJoin('locations', 'location_id', '=', 'locations.id')
->leftJoin('venues', 'venue_id', '=', 'venues.id')
->leftJoin('event_types', 'event_type_id', '=', 'event_types.id')
->leftJoin('event_statuses', 'event_status_id', '=', 'event_statuses.id')
->leftJoin('tutors', 'tutor_id', '=', 'tutors.id')
->leftJoin('delegate_event', 'delegate_event.event_id', '=', 'events.id')
->leftJoin('delegates', 'delegates.id', '=', 'delegate_event.delegate_id')
->leftJoin('contacts', 'delegates.contact_id', '=', 'contacts.id')->groupBy('events.id')
->select($columns)
->orderBy($order[0], $order[1])
->paginate($perPage);
return $events;
}
Если вы посмотрите на мой EventsController в методе GetOrder:
public function getOrder($order)
{
Session::put('event.order', $order);
return Redirect::back();
}
Вы можете увидеть, я храню порядок в сессии, а затем в моей модели с помощью, чтобы сортировать порядок Результаты.
Есть ли способ сделать это в Красноречии, как мне нужно?
Eloquent не использует объединения для своих отношений, поэтому я не верю, что вы сможете добиться того же заказа на любом из соединенных столбцов, и вы не получите ни одного результата с результатами, которые были предварительно объединены. –
Любая идея, как что-то подобное может быть достигнуто с использованием Eloquent, или это нужно сделать с помощью решения для интерфейса? –
Вы всегда можете преобразовать объект в массив и использовать соответствующие функции сортировки массива php. Я также предлагаю проверить плагин jquery TableSorter. Было бы намного быстрее, и ваши пользователи javascript, вероятно, оценят это. – user1669496