Подреждане на резултати от свързани таблици в Eloquent и сесията

Имам следното в моя модел на събития в 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 така, както трябва?


person Gareth Daine    schedule 10.05.2013    source източник
comment

Това е проблем с xDomain. С премахването на тази библиотека тя вече работи добре.

РЕДАКТИРАНЕ

Това вече е коригирано с xdomain версия 0.6.13.

  -  person Phill Sparks    schedule 10.05.2013
comment
Някаква идея как може да се постигне нещо подобно с помощта на Eloquent тогава или ще трябва да се направи с помощта на решение за интерфейс?   -  person Gareth Daine    schedule 10.05.2013
comment
Винаги можете да конвертирате обекта в масив и да използвате подходящите функции за сортиране на php масиви. Бих предложил също да проверите плъгина jquery TableSorter. Ще бъде много по-бързо и вашите потребители на JavaScript вероятно ще го оценят.   -  person user1669496    schedule 11.05.2013
comment
Да, опитах сортиране на таблици и щеше да е страхотно, с изключение на факта, че тъй като обектът ми е разделен в изгледа по седмици, започвайки, се обърква.   -  person Gareth Daine    schedule 11.05.2013


Отговори (1)


Знаете, че можете просто да добавите join() към eloquent, нали?

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

user::join('blogs', 'blogs.id','=','users.blog_id')
      ->order_by('blogs.title', 'asc')
      ->select(array('users.username', 'blogs.title'))
      ->paginate(10);
person Gaz_Edge    schedule 13.05.2013
comment
Хей, Газ, да, подредих го, като го направих точно по този начин, доста подобно. :-) - person Gareth Daine; 14.05.2013