表使用zend2水合物连接

时间:2013-07-25 08:34:21

标签: orm zend-framework2

我有一个表单可以将用户插入到数据库中,这需要一次更新两个表,用户表和 user_role_linker 表。我正在使用hydrator(ClassMethod)来映射我的实体与相关表。我使用两个单独的实体,用户 UserRole 。该表单包含使用用户表和用户角色字段映射的所有用户字段,以与 user_role_linker 表进行映射。提交表单时,将表单与用户实体绑定。

    $user  = new \ZfcUser\Entity\User();
    $form  = $this->getRegisterForm();
    $form->setHydrator($this->getFormHydrator());
    $form->bind($user);

    $user = $form->getData();

插入分两步执行。

    $this->getUserMapper()->insert($user);
    $user_role_linker->setId($user->getId());
    $user_role_linker->setRoleId($data['user_role']);
    $this->getUserRoleLinkMapper()->insert($user_role_linker);

首先插入用户并返回user_id,然后在 UserRole 实体中设置user_id和user_role并插入表格。

但现在的问题是将两个表提取到一个对象或一个数组。我可能需要执行表连接才能获得解决方案。但是我无法通过使用ClassMethod水合器找到连接表。

请帮助我完成此任务。

UserHydrator类

 namespace ZfcUser\Mapper;

 use Zend\Stdlib\Hydrator\ClassMethods;
 use ZfcUser\Entity\UserInterface as UserEntityInterface;

 class UserHydrator extends ClassMethods
 {
/**
 * Extract values from an object
 *
 * @param  object $object
 * @return array
 * @throws Exception\InvalidArgumentException
 */
public function extract($object)
{
    if (!$object instanceof UserEntityInterface) {
        throw new Exception\InvalidArgumentException('$object must be an instance of ZfcUser\Entity\UserInterface');
    }
    /* @var $object UserInterface*/
    $data = parent::extract($object);
    $data = $this->mapField('id', 'user_id', $data);
    //$data = $this->mapField('id', 'username', $data);
    return $data;
}

/**
 * Hydrate $object with the provided $data.
 *
 * @param  array $data
 * @param  object $object
 * @return UserInterface
 * @throws Exception\InvalidArgumentException
 */
public function hydrate(array $data, $object)
{
    if (!$object instanceof UserEntityInterface) {
        throw new Exception\InvalidArgumentException('$object must be an instance of ZfcUser\Entity\UserInterface');
    }
    $data = $this->mapField('user_id', 'id', $data);
    return parent::hydrate($data, $object);
}

protected function mapField($keyFrom, $keyTo, array $array)
{
    $array[$keyTo] = $array[$keyFrom];
    unset($array[$keyFrom]);
    return $array;
}
}

0 个答案:

没有答案