2014-01-17 24 views
-2

我想基於在一個一對多關係的內容屬性命令我的結果:的Symfony2 - ORDERBY條件

$qb = $this->getEntityManager()->createQueryBuilder(); 
    $qb 
     ->select($select) 
     ->from('MyBundle:RegistrationForm', 'r') 
     ->innerJoin('r.formAnswers','a') 
     ->innerJoin('a.formQuestion','q') 
     ->orderBy('q.id', 'ASC'); 

的順序應該發生的基礎上的「A「a.content」 .formQuestion.someId」。
有人知道如何解決這個問題嗎?

編輯

在表我爲了一個特定FormQuestion進行排序,例如在表頭點擊:性別。列的每個單元都有一個FormAnswer,所以列可能看起來像:

性別< - r.formQuestion
----------
男性< - a.content



我想按a.content排序。因此:

訂單RegistrationForms由問題答案的內容「性別」。

如何做到這一點?

+0

請指定問題,目前還不清楚你想如何排序 –

+0

更新了我的問題! – apfz

回答

0

這很簡單 - 您需要將此參數傳遞給orderBy。

$qb = $this->getEntityManager()->createQueryBuilder(); 
$qb 
    ->select($select) 
    ->from('MyBundle:RegistrationForm', 'r') 
    ->innerJoin('r.formEvent','f') 
    ->andWhere($qb->expr()->eq('f.id',':formEvent_id')); 

if ($orderBy!= false) { 
    $qb->innerJoin('r.surveyAnswers','s') 
     ->innerJoin('s.formQuestion','q') 
     ->orderBy('q.someId', 'ASC'); //here's your change 
} 
+0

但是這意味着它將排序在q.id而不是s.content – apfz

0

您可以傳遞給用於排序的函數參數$ order和$ orderDir。根據變量的值,您可以進行必要的連接。也許你想使用像PagerFanta或KnpPaginatorBundle這樣的ready paginators,它們允許你添加選項來排序(但只有一個實體沒有被聯合實體排序的能力)。或者您可以創建自定義實體存儲庫,從而將您的實體進行排序。

您應該注意參數必須經過驗證,否則教義將拋出500個有關數據庫中缺失字段的異常。

function getForms($sort = 'q.id', $dir = 'ASC') { 
    // validate $sort and $dir 

    $qb->orderBy($sort, $dir); 
} 
+0

我不確定我是否完全理解。我在哪裏調用getForms()方法?它是否像 - > orderBy(getForms('q.id','ASC')); ?我在什麼階段對a.content進行排序? – apfz

+0

在控制器中您可以獲取實體。你的問題不包括這些信息,我只是建議它 –

+0

對不起,這並沒有幫助我。這個問題確實包含了信息,請看第一行。 – apfz

0

我發現被指定在父實體類排序(從子實體i.e.field)而已,沒必要查詢手動指定訂單的要求最簡單的方法。

你可以看看this堆棧溢出的線程。