我目前正在使用以下代码
$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子句吗?
答案 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;