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

Php Symfony2错误要求参数1为对象,给定整数,php,symfony,orm,doctrine-orm,symfony-2.3,Php,Symfony,Orm,Doctrine Orm,Symfony 2.3,我在角色和用户角色之间有一对多的关系 class User { /** * @ORM\OneToMany(targetEntity="PNC\PermissionsBundle\Entity\UserRoles", mappedBy="user", cascade={"persist", "remove"}) */ protected $usersRole; } class UserRoles { /** * @ORM\ManyToOne(

我在角色和用户角色之间有一对多的关系

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();
角色还原函数如下

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现在是一个整数,但它应该是roles实体的对象

var\u dump
的结果是

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

在我的场景中,id如何做到这一点?

我认为没有UserRoles对象,您也可以做到这一点

尝试$user->roles

 /**
     * @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->users

 /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity="User", mappedBy="roles")
     */
    private $users;
和用户实体中的一个方法-->

因此,您的操作将如下所示:

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

我认为没有UserRoles对象也可以做到这一点

尝试$user->roles

 /**
     * @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->users

 /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity="User", mappedBy="roles")
     */
    private $users;
和用户实体中的一个方法-->

因此,您的操作将如下所示:

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

你发布的内容看起来应该有用。你确定它在抱怨setRole吗?你发布的内容看起来应该有用。你确定它在抱怨setRole吗?注意$user\u roles->setIsPrimary(false);线路?他想要UserRole上的附加属性。最好能找到它在什么上下文中使用。他想要有多个角色,其中一个角色标记为primary。有点不寻常,但没关系。当然,条令的manytomy关系不支持额外的属性。一条异常消息看起来会很好。不幸的是,我不能在他的问题下对此发表评论。我想我对Doctrine也有类似的问题,解决方案是直接设置用户id和角色id,而不是通过对象。Doctrine 2对象关系管理器的关键是对象。你很少直接和id打交道。一条错误消息就好了。如前所述,这个问题没有多大意义。请注意$user\u roles->setIsPrimary(false);线路?他想要UserRole上的附加属性。最好能找到它在什么上下文中使用。他想要有多个角色,其中一个角色标记为primary。有点不寻常,但没关系。当然,条令的manytomy关系不支持额外的属性。一条异常消息看起来会很好。不幸的是,我不能在他的问题下对此发表评论。我想我对Doctrine也有类似的问题,解决方案是直接设置用户id和角色id,而不是通过对象。Doctrine 2对象关系管理器的关键是对象。你很少直接和id打交道。一条错误消息就好了。正如所贴的,这个问题没有多大意义。