Имам следното в моя модел на събития в Laravel 4. Причината, поради която използвам QueryBuilder, а не Eloquent, е, че трябва да имам връзки във всяка заглавка на колона в моята таблица с резултати в моя изглед, че когато щракна, подредете резултатите по възходящ или низходящ въз основа на тази колона.
Проблемът, който имам, е, че ако използвам 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 така, както трябва?
Това е проблем с xDomain. С премахването на тази библиотека тя вече работи добре.
РЕДАКТИРАНЕ
Това вече е коригирано с xdomain версия
- person Phill Sparks   schedule 10.05.20130.6.13
.