Zend JOIN子句在对象中返回数组?

时间:2013-06-20 00:10:56

标签: sql zend-framework join

我目前正在使用以下代码

    $select = $this->select()
                 ->setIntegrityCheck(false)
                 ->from(array('st' => $this->_name))
                 ->join(array('sp' => 'staff_permissions'), 'sp.staff_id = st.id and sp.pool_id = ' . $pool_id )
                 ->join(array('p' => 'permissions'), 'p.id = sp.permission_id')
                 ->where('staff_id = ?', $staff_id);
    return $this->fetchAll($select)->toArray();

它结合了三个表并返回结果。 'st'表对应一个人员(所以一行),另外两个表对应多行。所以我希望得到一个单个对象,使其他两个表是对象内的数组。

举个例子,我得到$ row,所以$ row-> first_name是名字,但是$ row-> permission_id是一个包含所有id的数组。

可以使用JOIN子句吗?

1 个答案:

答案 0 :(得分:1)

此查询应在应用程序的最低层完成,堆栈中的下一层将是您的映射器。在您的映射器图层中,您可以映射到您的实体,这将是一个“员工”实体(对象),其中包含“staff_permissions”和&的集合。 “权限”的集合

模型图:

-----------
| service | // business logic
-----------
     |
-----------
|  mapper | // maps external data to internal entities (or vice versa)
-----------
     |
-----------    ----------------------
|dao (sql)| -> | zend table gateway |
-----------    ----------------------

mapper示例代码:

$staffEntity = new StaffEntity();
$staffEntity->setName($response['name']);

foreach($response['staff_permissions] as $permission) {
    $permission = new Permission();
    $permission->setName($permission['name']);
    $permission->setRule($permission['rule']);
    // ... etc ...
    $staffEntity->addPermission($permission);
}

// ... same for permissions ...

return $staffEntity;