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