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\OneToMany(targetEntity="Order", mappedBy="user", cascade={"persist", "remove"}) */ private $orders; public function __construct() { $this->orders = 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 getOrders() { return $this->orders; } public function addOrder(Order $order): self { $this->orders[] = $order; $order->setUser($this); return $this; } }
namespace Application\Entity; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="orders") */ class Order { /** @ORM\Id @ORM\GeneratedValue @ORM\Column(type="integer") */ private $id; /** @ORM\Column(type="string") */ private $product; /** @ORM\Column(type="float") */ private $amount; /** * @ORM\ManyToOne(targetEntity="User", inversedBy="orders") * @ORM\JoinColumn(name="user_id", referencedColumnName="id", onDelete="CASCADE") */ private $user; // Getters and Setters public function getId(): ?int { return $this->id; } public function getProduct(): ?string { return $this->product; } public function setProduct(string $product): self { $this->product = $product; return $this; } public function getAmount(): ?float { return $this->amount; } public function setAmount(float $amount): self { $this->amount = $amount; return $this; } public function getUser(): ?User { return $this->user; } public function setUser(User $user): self { $this->user = $user; return $this; } }
Run this in terminal:
php vendor/bin/doctrine-migrations diff
php vendor/bin/doctrine-migrations migrate
This will create:
users
orders
$user = new User(); $user->setName('Sathish'); // Create multiple orders $order1 = new Order(); $order1->setProduct('T-shirt')->setAmount(499); $order2 = new Order(); $order2->setProduct('Shoes')->setAmount(1299); // Associate orders with user $user->addOrder($order1); $user->addOrder($order2); // Save $this->entityManager->persist($user); // Orders are automatically persisted because of cascade $this->entityManager->flush();
$users = $this->entityManager->getRepository(User::class)->findAll(); foreach ($users as $user) { echo "User: " . $user->getName() . "<br>"; foreach ($user->getOrders() as $order) { echo "Product: " . $order->getProduct() . " - ₹" . $order->getAmount() . "<br>"; } }
$user = $this->entityManager->getRepository(User::class)->find(1); echo "User: " . $user->getName() . "<br>"; foreach ($user->getOrders() as $order) { echo "Product: " . $order->getProduct() . " - ₹" . $order->getAmount() . "<br>"; }
$orders = $this->entityManager->getRepository(Order::class)->findAll(); foreach ($orders as $order) { echo "Order #" . $order->getId() . ": " . $order->getProduct() . " ₹" . $order->getAmount(); echo " (User: " . $order->getUser()->getName() . ")<br>"; }
$order = $this->entityManager->getRepository(Order::class)->find(1); echo "Order: " . $order->getProduct() . "<br>"; echo "Amount: ₹" . $order->getAmount() . "<br>"; echo "User: " . $order->getUser()->getName();
$user = $this->entityManager->getRepository(User::class)->find(1); $user->setName("Updated Name"); $order = $this->entityManager->getRepository(Order::class)->find(1); $order->setAmount(599); $this->entityManager->flush();
$user = $this->entityManager->getRepository(User::class)->find(1); $this->entityManager->remove($user); $this->entityManager->flush();
$order = $this->entityManager->getRepository(Order::class)->find(1); if ($order) { $this->entityManager->remove($order); $this->entityManager->flush(); echo "Order deleted."; }
$results = $entityManager->createQuery( 'SELECT u, o FROM Application\Entity\User u JOIN u.orders o WHERE u.id = :id' )->setParameter('id', 1)->getResult();