2014-04-16 78 views
0

使用雄辯排序表格數據使用名稱字段在其中一個相關表上的Laravel 4項目表上使用雄辯,實現一個排序函數。Laravel 4使用條款

表:

項目(使用CLIENT_ID,CONTACT_ID,phase_id)

客戶端(ID,姓名)

聯繫(ID,姓名)

階段(ID,姓名)

項目包含其他3個相關表的ID,但顯示名稱字段爲每個使它人類可讀。我使用的是預先加載並使用獲得的數據:

$projects = Project::with('client', 'contact', 'phase')->get(); 

我想什麼,能夠做的是一樣的東西:

$projects = Project::with(array('client' => function($query) 
        { 
         $query->orderBy('name', $direction); 
        }), 'contact', 'phase')->get(); 

凡方向由查詢字符串確定允許用戶在這種情況下在客戶名稱上切換排序方向。但是,它不起作用。

我是新來的拉拉維爾,並試圖讓我的頭繞着做和不經過雄辯,所以任何幫助將不勝感激。

回答

0

使用連接而不是急於在這裏加載(如果我對你有幫助,你有1個聯繫人,每個項目的客戶端和階段),或者你需要對集合進行排序。後者會很麻煩。

Project::join('clients', 'clients.id', '=', 'projects.client_id') 
    ->join('contacts', 'contacts.id', '=', 'projects.contact_id') 
    ->join('phases', 'phases.id', '=', 'projects.phase_id') 
    ->select(array('projects.*','clients.name as clientName','contacts.name as contactName','phases.name as phaseName')) 
    ->orderBy("$orderBy", "$direction"); // $orderBy = eg. 'clientName' 
    // and if you still need to load related models then uncomment: 
    // with(array('contact','client','phase')) 
    ->get(); 
+0

輝煌,您的查詢工作完美!我懷疑這可能是我必須走下去的路線。 – Alex