У меня есть провайдер Entity (это репозиторий объектов, который выполняет поиск и дает мне пользователя при аутентификации), как это entity provider (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 # сохраняется() на этой неизвестной сущности или настройка каскад сохраняется»
, но как это может быть: unpersisted лица было дано entityRepository ??? (если сохраняется GetUser() эм пытается для добавления нового сотрудника) Как установить создателя задачи?
Мне не нужно вставлять новых пользователей. Я хочу установить текущий аутентифицированный пользователь – jhard
вы пытались запустить код с установкой cascade persist – phpsherpa
да, я написал (последняя строка вопроса (нет каскада в аннотации, но смысл тот же)) – jhard