sorting - Ordering Results from Related Tables in Eloquent and the Session -
i have following in event model in laravel 4. reason using querybuilder , not eloquent need have links in each column header in results table in view, when clicked, order results in asc or desc based on column.
the issue i'm having is, if use eloquent, won't work of data pulled through via relationships other tables, eloquent can't find required columns/fields.
public static function getevents($perpage = 10) { $order = session::get('event.order', 'start_date.desc'); $order = explode('.', $order); $columns = array( 'events.id id', 'title', 'locations.city city', 'suppliers.name supplier_name', 'venues.name venue_name', 'start_date', 'courses.price course_price', 'type', 'status', 'max_delegates availability', 'tutors.first_name tutor_first_name', 'tutors.last_name tutor_last_name', 'contacts.first_name 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; } if @ eventscontroller @ getorder method:
public function getorder($order) { session::put('event.order', $order); return redirect::back(); } you can see storing order in session , in model using sort order of results.
is there way in eloquent way need to?
you know can add join() eloquent right?
so, example, if have users , each user has blog posts (i.e. user has_many blogs), can output eloquent model showing username , blog title, ordered blog title, follows:
user::join('blogs', 'blogs.id','=','users.blog_id') ->order_by('blogs.title', 'asc') ->select(array('users.username', 'blogs.title')) ->paginate(10);
Comments
Post a Comment