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。