0

我有一个将用户插入数据库的表单,它需要更新两个表@一次,用户表和user_role_linker表。我正在使用 hydrator (ClassMethod) 将我的实体与相关表进行映射。我使用两个单独的实体,UserUserRole。该表单包含与User表映射的所有用户字段和与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 hydrator 加入表格的方法。

请帮我完成这个。

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;
}
}
4

0 回答 0