2013-05-10 5 views
0

У меня есть следующее в моей модели 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(); 
} 

Вы можете увидеть, я храню порядок в сессии, а затем в моей модели с помощью, чтобы сортировать порядок Результаты.

Есть ли способ сделать это в Красноречии, как мне нужно?

+0

Eloquent не использует объединения для своих отношений, поэтому я не верю, что вы сможете добиться того же заказа на любом из соединенных столбцов, и вы не получите ни одного результата с результатами, которые были предварительно объединены. –

+0

Любая идея, как что-то подобное может быть достигнуто с использованием Eloquent, или это нужно сделать с помощью решения для интерфейса? –

+0

Вы всегда можете преобразовать объект в массив и использовать соответствующие функции сортировки массива php. Я также предлагаю проверить плагин jquery TableSorter. Было бы намного быстрее, и ваши пользователи javascript, вероятно, оценят это. – user1669496

ответ

1

Вы знаете, что можете просто добавить join() к красноречивому праву?

Так, в качестве примера, если у вас есть пользователи, и каждый пользователь имеет некоторые сообщения пользователя (т.е. пользователь has_many блоги), вы можете выводить красноречивым модель, показывающая имя пользователя и название блога, упорядоченный по названию блога, следующим образом:

user::join('blogs', 'blogs.id','=','users.blog_id') 
     ->order_by('blogs.title', 'asc') 
     ->select(array('users.username', 'blogs.title')) 
     ->paginate(10); 
+0

Эй, Газ, да, это отсортировано, делая это точно так, хорошо похоже. :-) –

+0

Cool - рад своей работе :-) –