У меня есть несколько типов сущностей, которые расширяют друг друга для создания моей модели. В моем приложении мне нужно управлять Interimaries
, Employes
и Users
.
. В компании работает Interimary
, как и Employe
. Пользователь в Employe
моего приложения с доступом к приложению.
Моя модель определена следующим образом:
Рабочий:
<?php
/**
* @ORM\Entity(repositoryClass="App\Repository\User\WorkerRepository")
* @ORM\Table(name="usr_worker")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="discr", type="string")
* @ORM\DiscriminatorMap({"worker" = "Worker", "employe" = "Employe", "interimary" = "Interimary", "user" = "User"})
*/
class Worker
{
private $id;
}
Interimary:
<?php
/**
* @ORM\Entity(repositoryClass="App\Repository\User\InterimaryRepository")
* @ORM\Table(name="usr_interimary")
*/
class Interimary extends Worker{}
Сотрудник:
<?php
/**
* @ORM\Entity(repositoryClass="App\Repository\User\EmployeRepository")
* @ORM\Table(name="usr_employe")
*/
class Employe extends Worker{}
Пользователь:
<?php
/**
* @ORM\Entity(repositoryClass="App\Repository\User\UserRepository")
* @ORM\Table(name="usr_user")
* @Gedmo\SoftDeleteable(fieldName="deletedAt", timeAware=false)
* @ORM\HasLifecycleCallbacks()
*/
class User extends Employe implements UserInterface
{
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $username;
/**
* @var string The hashed password
* @ORM\Column(type="string", nullable=true)
*/
private $password;
}
Все мои логины аутентификации c находятся в моем классе User
. Логика c моего приложения заключается в том, что при первом входе пользователя в систему он должен выбрать в раскрывающемся списке Сотрудника, к которому он присоединен.
Проблема : у меня есть Employe
сущность и User
сущность, которую я хочу "объединить", когда пользователь выбирает сотрудника.
Решение? : Моей первой идеей было изменить User
ID, чтобы он соответствовал моему Employe
ID, а затем удалить старого сотрудника пользователя, но это не работает. Я не уверен, что подход плох, но я понятия не имею, что не работает с этим методом.
/**
* @Route("/user/linkemploye", name="user_employe_link")
*/
public function linkUserEmploye(Request $request)
{
$user = $this->getUser();
$employes = $this->employeRepository->findUnlincked();
if($request->isMethod('POST')){
$idEmploye = $request->request->get('employe');
$employe = $this->employeRepository->find($user->getId());
$intoEmploye = $this->employeRepository->find($idEmploye);
$this->mergeEmployes($employe, $intoEmploye);
$user->setUserLincked(true);
$em = $this->getDoctrine()->getManager();
$em->persist($user);
$em->flush();
return $this->redirectToRoute('app_homepage');
}
return $this->render('app/users/security/UserEmployeLink/userEmployeLink.html.twig', [
"employes" => $employes
]);
}
public function mergeEmployes(Employe $employe, Employe $intoEmploye){
//How to properly merge my 2 entities ?
}