2013-05-10 67 views
0

我在Laravel 4的事件模型中有以下內容。我使用QueryBuilder而不是雄辯的原因是我需要在我的結果表中的每個列標題中包含鏈接查看,單擊時,根據該列以asc或desc命令結果。在雄辯和會話中從相關表中訂購結果

我遇到的,如果我用雄辯的,它不會因爲大部分數據的工作問題已通過通過其他表的關係拉,所以雄辯無法找到所需的列/字段。

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

雄辯不會爲其關係使用連接,所以我不相信您能夠在任何連接的列上實現相同的排序,也不會得到預結合結果的單個結果。 – 2013-05-10 15:27:52

+0

任何想法如何使用Eloquent可以達到類似的效果,還是必須使用前端解決方案來完成? – 2013-05-10 15:47:56

+0

您始終可以將對象轉換爲數組並使用適當的PHP數組排序函數。我也建議查看jQuery TableSorter插件。會更快,你的JavaScript用戶可能會很感激它。 – user1669496 2013-05-10 21:10:51

回答

1

你知道你可以添加一個連接()來雄辯嗎?

所以,作爲一個例子,如果你有用戶和每個用戶都有一些博客文章(即用戶的has_many博客),可以輸出顯示的用戶名和博客標題雄辯的模型,通過博客標題排序如下:

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

嘿Gaz,是這樣分類的,完全一樣,非常相似。 :-) – 2013-05-14 10:15:38

+0

酷 - 很高興它的工作:-) – 2013-05-14 11:14:49