У меня есть одно-много отношений между Ролями и 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 Entity. У меня только $ 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()
;
}
я понимаю, что $ role теперь ведет себя как целое число, но это должен быть объект Roles Entity.
REsult var_dump
является
string(22) "it is not an object..."
Как id может сделать это в моем сценарии....?
Я думаю, вы можете сделать то же самое без UserRoles Object!
Попробуйте $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();