Symfony2错误要求参数1为对象,给定整数

时间:2015-11-10 13:40:10

标签: php symfony orm doctrine-orm symfony-2.3

我在角色和UserRoles之间有一对多的关系。

class User {
    /**
     * @ORM\OneToMany(targetEntity="PNC\PermissionsBundle\Entity\UserRoles", mappedBy="user", cascade={"persist", "remove"})
     */
    protected $usersRole;
}

class UserRoles {
    /**
     * @ORM\ManyToOne(targetEntity="PNC\PermissionsBundle\Entity\Roles", inversedBy="usersRole", cascade={"persist"}, fetch="EAGER")
     * @ORM\JoinColumn(name="role_id", referencedColumnName="id")
     */
    protected $role;
    /**
     * @ORM\ManyToOne(targetEntity="Application\Sonata\UserBundle\Entity\User", inversedBy="usersRole", cascade={"persist"}, fetch="EAGER")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     */
    protected $user;
}


class Roles {
    /**
     * @ORM\OneToMany(targetEntity="PNC\PermissionsBundle\Entity\UserRoles", mappedBy="role", cascade={"persist", "remove"})
     */
    protected $usersRole;
}

我需要插入UserRoles实体。我只有$ user作为对象,但$ role作为id。

$user_roles = new UserRoles();
$role = $em->getRepository('PNCPermissionsBundle:Roles')->findRoleByID($id);

$user_roles->setRole($role if(is_object($role)){
                    var_dump('it is an object...');exit;
                }else{
                    var_dump('it is not an object...');exit;
                });
$user_roles->setUser($user);
$user_roles->setIsPrimary(false);
$em->persist($user_roles);
$em->flush();

RoleRepository 功能为

public function findRoleByID($role_id){
        return $this->createQueryBuilder('r')
            ->select('r.id')
            ->Where('r.id = :role_id')
            ->setParameter('role_id', $role_id)
            ->getQuery()
            ->getOneOrNullResult()
            ;
    }
我理解的是,$ roles现在表现为整数,但它应该是角色实体的对象。

var_dump的结果是

string(22) "it is not an object..."

id如何在我的场景中执行此操作....?

1 个答案:

答案 0 :(得分:0)

我认为没有UserRoles对象你也可以这样做!

尝试$ user->角色

 /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity="Role", inversedBy="users")
     * @ORM\JoinTable(name="users_roles",
     *   joinColumns={
     *     @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     *   },
     *   inverseJoinColumns={
     *     @ORM\JoinColumn(name="role_id", referencedColumnName="id")
     *   }
     * )
     */
    protected $roles;

对于$ role->用户

 /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity="User", mappedBy="roles")
     */
    private $users;

以及用户实体中的方法 - >

   /**
     * @param Role $role
     * @return $this
     */
    public function addRole(Role $role)
    {
        $this->roles->add($role);
        return $this;
    }

所以你的行动将如下:

$user->addRole($role);
$em->persist($user);
$em->flush();