我显然处于深渊。我没有理解扩展基本模型的Doctrine ModelClass和Model Table Class的好处
例如
class StaffStaff extends Base_StaffStaff
{
public function getStaffInformation($id_staff_staff){ // == getInformationsByStaff()
$query = Doctrine_Query::create()
->from("StaffStaff s")
->innerJoin('s.StaffContract c')
->where("s.id_staff_staff = ?", $id_staff_staff);
$result = $query->execute();
return $result;
}
}
并在控制器中
StaffController{
public function readAction() {
$id = $this->getRequest()->getParam("id_staff_staff");
// Get information about a staff
$model = new StaffStaff();
$q = $model->getStaffInformation($id);
$this->view->data = $q[0];
/**
*
* Why do you have to say $q[0] ?
* Is there no better way of doing it?
* How can we access the properties from other tables contained inside the BaseClass extended by the ModelClass
*
*/
}
型号:
/**
* Base_StaffStaff
*
* This class has been auto-generated by the Doctrine ORM Framework
*
* @property integer $id_staff_staff
* @property integer $fk_id_staff_individual
* @property integer $fk_id_staff_team
* @property integer $fk_id_staff_function
*
*/
答案 0 :(得分:1)
使用查询生成器API时,getStaffInformation()
函数中汇编查询的方式是execute()
方法返回可迭代的游标。这个游标本质上是一个数组,这就是$ q [0]将访问第一个元素的原因。
如果您只是尝试返回一个结果,则应使用getSingleResult()
代替:
$query = Doctrine_Query::create()
->from("StaffStaff s")
->innerJoin('s.StaffContract c')
->where("s.id_staff_staff = ?", $id_staff_staff);
return $query->getSingleResult();
另一方面,可迭代光标很干净,因为你可以做类似的事情:
$staff = $model->getStaffInformation($id);
foreach($staff as $person)
{
// Assign all staff to view array
$this->view->staff[] = $person;
}