我有实体提供者(它只是在身份验证时搜索并为我提供用户的实体存储库),就像这个实体提供者 (MyBundle:Employee 实现 UserInterface 所以没关系)
class EmployeeRepository extends EntityRepository implements UserProviderInterface
{
public function loadUserByUsername($username)
{
$user = $this->getEntityManager()
->createQuery("SELECT e FROM MyBundle:Employee e ...")
->setParameters(...)->getOneOrNullResult();
if ($user) {
return $user;
}
throw new UsernameNotFoundException();
}
public function refreshUser(UserInterface $user)
{
...
return $this->find($user->getId());
}
}
我有另一个实体
class Task {
...
/**
* @ManyToOne(targetEntity="Employee")
* @JoinColumn()
*/
protected $creator;
... + setters/getters
}
所以在控制器的某个地方我有:
$task = new Task();
$task->setCreator($this->getUser()) // or $this->get('security.context')->getToken()->getUser();
$em->persist($task);
$em->flush();
我有异常“通过关系'...\Entity\Task#creator'找到了一个新实体,该实体未配置为对实体进行级联持久操作:...\Entity\Employee@0000000066a194ca0000000038e61044。要解决此问题:在此未知实体上显式调用 EntityManager#persist() 或配置级联持续"
但怎么可能:未持久化的实体是由 entityRepository 给出的???(如果坚持 getUser() em 尝试插入新员工)我如何设置任务的创建者?