2016-10-26 4 views
0

私はmany_many関係からStaffを取得しようとしています。Silverstripe 3.4 sqlquery many-many

デイジーはオフィスで、ワークショップ

あるDagobertはデイジーとDagobertは奥付(AdImpressum)に表示されるはずですオフィスで

です。

私の関係テーブルでデイジーは私が今何を得る

(Officeの一つ、ワークショップのための1)。異なるSORTORDER値で2回(Offie、ワークショップ)が表示されますSORTORDER 1ドナルドですSORTORDER 1と とデイジー

は、どのように私のクエリはユニークSORTORDER値でAdImpressum 1 とすべてのスタッフを取得するように変更する必要がありますか?

StaffCatObject 


ID | ClassName | CatOrder | Name | 

1 | StaffCatObject |  1 | OFFICE | 
2 | StaffCatObject |  2 | WORKSHOP | 



Staff 

ID | ClassName | Name | AdImpressum | 

1 | Staff | Daisy |  1  | 
2 | Staff | Donald |  0  | 
3 | Staff | Dagobert |  1  | 
4 | Staff | Gustav |  0  | 
5 | Staff | Daniel |  0  | 



StaffCatObject_Staffs 

ID |StaffCatObjectID | StaffID | SortOrder | Display | 

1 |  1  | 1 |  1  | 1 | (=Daisy) 
3 |  1  | 3 |  3  | 1 | 
4 |  2  | 2 |  1  | 1 | (=Donald) 
5 |  1  | 4 |  2  | 1 | 
8 |  2  | 1 |  2  | 1 | (=Daisy) 
…. 

私の機能:

public function getImpressumStaff(){ 

    $sqlQuery = new SQLSelect(); 
    //$sqlQuery->select = array('DISTINCT StaffID, StaffCatObject_Staffs.SortOrder, StaffCatObjectID, Display, StaffCatObject_Staffs.ID'); 
    $sqlQuery->from = array('StaffCatObject_Staffs'); 
    $sqlQuery->addWhere('"Display" = 1'); 
    $sqlQuery->addLeftJoin('StaffCatObject', '"StaffCatObject"."ID" = "StaffCatObject"."ID"'); 
    $sqlQuery->addLeftJoin('Staff', '"Staff"."ID" = "StaffCatObject_Staffs"."StaffID"'); 
    $sqlQuery->addWhere('"AdImpressum" = 1'); 
    $sqlQuery->setOrderBy('StaffCatObject.SortOrder'); 

    //$sqlQuery->setOrderBy('StaffCatObject_Staffs.SortOrder'); 
    //$sqlQuery->setGroupBy('StaffCatObject_Staffs.StaffID'); 
    //$sqlQuery->setGroupBy('StaffCatObject_Staffs.SortOrder ASC'); 

    $sqlQuery->setGroupBy('StaffCatObject_Staffs.StaffCatObjectID'); 
    $result = $sqlQuery->execute(); 

    $returnedRecords = new ArrayList(); 
    foreach($result as $row) { 
     $returnedRecords->push(new ArrayData($row)); 
     //print_r($row); 
    } 
    return $returnedRecords; 
} 

Thanks.Sepp。

答えて

0

SortOrderは同じスタッフカテゴリで一意です。フィルタを追加する必要があります。

あなたのクエリが質問に答えることができます。

  • 「Officeの何スタッフが奥付に表示されます?」
  • 「ImpressumにはWorkshopのどのスタッフが参加するのですか?

SortOrderフィールドは関連しません。

関連する問題