【发布时间】:2016-10-26 12:29:05
【问题描述】:
我正在尝试从 many_many 关系中获取 Staffs。
黛西在办公室和车间
达戈贝尔在办公室
Daisy 和 Dagobert 应该出现在 Impressum (AdImpressum) 中。
在我的关系表中,Daisy 以不同的 SortOrder-value 出现了两次(Offie、Workshop)。(一个用于 Office,一个用于 Workshop)
我现在得到的是 Donald 和 SortOrder 1 和 Daisy 与 SortOrder 1
如何更改我的查询以让所有员工都使用 AdImpressum 1 具有唯一的 SortOrder 值?
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;
}
谢谢赛普。
【问题讨论】:
标签: silverstripe