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:
usersrolesuser_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();