ZF Doctrine模型类ext基类

时间:2012-06-15 13:15:16

标签: php zend-framework model doctrine

我显然处于深渊。我没有理解扩展基本模型的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
 * 
 */

1 个答案:

答案 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;
}