Silverstripe 3.4 sqlquery很多

时间:2016-10-26 12:29:06

标签: silverstripe

我正在努力让员工摆脱多方面的关系。

Daisy在办公室和工作室

Dagobert在办公室

Daisy和Dagobert应出现在Impressum(AdImpressum)。

在我的关系表中,Daisy出现两次(Offie,Workshop),具有不同的 SortOrder值。(一个用于Office,一个用于Workshop)

我现在得到的是 Donald with SortOrder 1 Daisy with 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;
}

Thanks.Sepp。

1 个答案:

答案 0 :(得分:0)

SortOrder对于同一职员类别是唯一的。所以你需要添加额外的过滤器。

您的查询可以回答以下问题:

  • "办公室的哪些工作人员应该出现在Impressum?"
  • "研讨会中的哪些工作人员应该出现在Impressum?"

否则SortOrder字段无关。