Zend Basic Tutorial
Zend Forms
Zend Database
Zend Advanced
Inject EntityManager link
namespace Application\Entity; use Doctrine\ORM\Mapping as ORM; use Doctrine\Common\Collections\ArrayCollection; /** * @ORM\Entity * @ORM\Table(name="users") */ class User { /** @ORM\Id @ORM\GeneratedValue @ORM\Column(type="integer") */ private $id; /** @ORM\Column(type="string") */ private $name; /** * @ORM\ManyToMany(targetEntity="Role", inversedBy="users", cascade={"persist"}) * @ORM\JoinTable(name="user_roles", * joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, * inverseJoinColumns={@ORM\JoinColumn(name="role_id", referencedColumnName="id")} * ) */ private $roles; public function __construct() { $this->roles = new ArrayCollection(); } // Getters and Setters public function getId(): ?int { return $this->id; } public function getName(): ?string { return $this->name; } public function setName(string $name): self { $this->name = $name; return $this; } public function getRoles() { return $this->roles; } public function addRole(Role $role): self { if (!$this->roles->contains($role)) { $this->roles[] = $role; $role->addUser($this); } return $this; } }
namespace Application\Entity; use Doctrine\ORM\Mapping as ORM; use Doctrine\Common\Collections\ArrayCollection; /** * @ORM\Entity * @ORM\Table(name="roles") */ class Role { /** @ORM\Id @ORM\GeneratedValue @ORM\Column(type="integer") */ private $id; /** @ORM\Column(type="string") */ private $name; /** * @ORM\ManyToMany(targetEntity="User", mappedBy="roles") */ private $users; public function __construct() { $this->users = new ArrayCollection(); } // Getters & Setters public function getId(): ?int { return $this->id; } public function getName(): ?string { return $this->name; } public function setName(string $name): self { $this->name = $name; return $this; } public function getUsers() { return $this->users; } public function addUser(User $user): self { if (!$this->users->contains($user)) { $this->users[] = $user; } return $this; } }
Run this in terminal:
php vendor/bin/doctrine-migrations diff
php vendor/bin/doctrine-migrations migrate
This will create:
users
roles
user_roles
(pivot table automatically)$user = new User(); $user->setName('Sathish'); $adminRole = new Role(); $adminRole->setName('Admin'); $editorRole = new Role(); $editorRole->setName('Editor'); $user->addRole($adminRole); $user->addRole($editorRole); $entityManager->persist($user); $entityManager->flush();
$user = $entityManager->getRepository(User::class)->find(1); echo "User: " . $user->getName() . "<br>"; foreach ($user->getRoles() as $role) { echo "Role: " . $role->getName() . "<br>"; }
$user = $entityManager->getRepository(User::class)->find(2); $role = $entityManager->getRepository(Role::class)->find(1); $user->addRole($role); $entityManager->flush();
$user = $entityManager->getRepository(User::class)->find(2); $role = $entityManager->getRepository(Role::class)->find(1); if ($user->getRoles()->contains($role)) { $user->getRoles()->removeElement($role); } $entityManager->flush();
$role = $entityManager->getRepository(Role::class)->find(1); $entityManager->remove($role); $entityManager->flush();
$usersWithRoles = $entityManager->createQuery( 'SELECT u, r FROM Application\Entity\User u JOIN u.roles r' )->getResult();