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打交道。一条错误消息就好了。正如所贴的,这个问题没有多大意义。