Doctrine With | Fórum | School of Net

Deseja poder participar de nosso fórum e tirar todas as suas dúvidas?
Clique aqui e assine nosso plano de acesso ilimitado. Saiba mais.

por Elvis

8 meses atrás Elvis

Doctrine With

Luiz Carlos, eu preciso retornar uma coleção de produtos semelhante a o with do eloquent. eu preciso que apos os filtragem na entidade, ele retorne a json com a coleção de preços Por exemplo ``` { "id": 460, "name": "Guarda Roupas Roupeiro Luapa Berlin com 10 Portas e 12 Gavetas Com pés- Walnut", "prices"[{ ... } ] } ``` fazendo um join com o price, não e viável para mim, por questão da paginação que ele não faz direito, esse problema da paginação eu já tinha explicado em outra pergunta. E se tem alguma forma de produzir o mesmo resultado da consulta abaixo, com a mesma velocidade usando a entidade, ou outra forma mais eleguante ``` $qb = $this->em->createQueryBuilder(); $query = $qb->select('p.id, p.name, p.external_id, p.active') ->from(\App\Domain\Product::class, 'p') ->setMaxResults(10) ->setFirstResult(0); $sub = $this->em->createQueryBuilder(); $sub->select("s")->from(\App\Domain\Stock::class, "s")->andWhere('s.product_id = p.id')->andWhere('s.quantity > 0'); $query->andWhere($query->expr()->exists($sub)); ```` **Product** ``` <?php /** * Created by PhpStorm. * User: elvis * Date: 03/02/2019 * Time: 15:15 */ namespace App\Domain; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity(repositoryClass="ProductRepository") * @ORM\HasLifecycleCallbacks() * @ORM\Table(name="produtos") */ class Product { use TimestampableTrait; /** * @ORM\Id * @ORM\GeneratedValue * @ORM\Column(type="integer", name="id_produto") */ private $id; /** * @ORM\Column(type="string", name="produto") */ private $name; /** * @ORM\Column(type="string", name="codigo", length=20) */ private $external_id; /** * @ORM\Column(type="boolean", name="exibir") */ private $active; /** * @ORM\OneToMany(targetEntity="Stock", mappedBy="product") */ private $stocks; /** * @ORM\OneToMany(targetEntity="Price", mappedBy="product") */ private $prices; public function __construct() { $this->stocks = new ArrayCollection(); $this->prices = new ArrayCollection(); } /** * @return int */ public function getId() { return $this->id; } /** * @param int $id * @return Product */ public function setId($id) { $this->id = $id; return $this; } /** * @return mixed */ public function getExternalId() { return $this->external_id; } /** * @param mixed $external_id * @return Product */ public function setExternalId($external_id) { $this->external_id = $external_id; return $this; } /** * @return string */ public function getName() { return $this->name; } /** * @@param string $name * @return Product */ public function setName($name) { $this->name = $name; return $this; } /** * @return mixed */ public function getActive() { return $this->active; } /** * @param mixed $active * @return Product */ public function setActive($active) { $this->active = $active; return $this; } /** * @return ArrayCollection */ public function getStocks(): ArrayCollection { return $this->stocks; } /** * @return ArrayCollection */ public function getPrices(): ArrayCollection { return $this->prices; } } ``` **Stock** ``` <?php /** * Created by PhpStorm. * User: elvis * Date: 05/02/2019 * Time: 20:13 */ namespace App\Domain; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity(repositoryClass="StockRepository") * @ORM\Table(name="estoques") */ class Stock { /** * @ORM\Id * @ORM\Column(type="integer", name="fk_produto") */ private $product_id; /** * @ORM\ManyToOne(targetEntity="Product", inversedBy="stocks") * @ORM\JoinColumn(name="fk_produto", referencedColumnName="id_produto") */ private $product; /** * @ORM\Column(type="integer", name="estoque") */ private $quantity; /** * @return integer */ public function getProductId() { return $this->product_id; } /** * @param integer $product_id * @return Stock */ public function setProductId($product_id) { $this->product_id = $product_id; return $this; } /** * @return integer */ public function getQuantity() { return $this->quantity; } /** * @param integer $quantity * @return Stock */ public function setQuantity($quantity) { $this->quantity = $quantity; return $this; } } ```

13 Respostas