如何检索关联的ManyToOne实体?

时间:2016-10-16 17:48:59

标签: symfony doctrine-orm doctrine

在控制器中我尝试检索所有订单产品:

$products = $this->getDoctrine()->getRepository('AppBundle:Ordr')->find(1)->getOrdrProducts();
var_dump($products);

...但$products不包含任何产品。

我试图模仿this

Entity \ Ordr.php:

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * @ORM\Table(name="ordr")
 * @ORM\Entity
 */
class Ordr
{
    public function __construct()
    {
        $this->ordr_products = new ArrayCollection();
    }


    /**
     * @ORM\Column(name="idOrdr", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $idordr;

    /**
     * @ORM\Column(type="string")
     */
    private $name;


    /**
     * @ORM\OneToMany(targetEntity="OrdrProduct", mappedBy="ordr")
     */
    protected $ordr_products;


    /**
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getOrdrProducts()
    {
        return $this->ordr_products;
    }

    public function getIdordr()
    {
        return $this->idordr;
    }

    public function addOrdrProducts(\AppBundle\Entity\OrdrProduct $ordrProducts)
    {
        $this->ordr_products[] = $ordrProducts;

        return $this;
    }

    public function removeOrdrProducts(\AppBundle\Entity\OrdrProduct $ordrProducts)
    {
        $this->ordr_products->removeElement($ordrProducts);
    }

}

Entity \ OrdrProduct.php:

/**
 * @ORM\Table(name="ordr_products", indexes={@ORM\Index(name="idOrdr_idx", columns={"idOrdr"})})
 * @ORM\Entity
 */
class OrdrProduct
{

    /**
     * @ORM\Column(name="idOrdrProduct", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $idordrproduct;

    /**
     * @ORM\Column(type="string")
     */
    private $name;

    /**
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Ordr", inversedBy="ordr_products")
     * @ORM\JoinColumn(name="idOrdr", referencedColumnName="idOrdr")
     */
    private $ordr;

    public function getIdordrproduct()
    {
        return $this->idordrproduct;
    }

    public function setOrdr(\AppBundle\Entity\Ordr $ordr = null)
    {
        $this->ordr = $ordr;

        return $this;
    }

    public function getOrdr()
    {
        return $this->ordr;
    }

}

我的帖子主要是代码,我为此道歉。我不知道该怎么添加更多关于这个问题。

我可以添加更多关于其他内容的内容。

1 个答案:

答案 0 :(得分:0)

希望这会对你有所帮助:

尝试按ID获取一个订单(所有与之相关的订单产品)

#AppBundle\Repository\OrderRepository.php 

public function findOrderById($id)
    {
        $qb = $this->createQueryBuilder('o')
                ->join('o.ordr_products', 'r')
                ->addSelect('r')
                ->where('o.id = :id')
                ->setParameter(':id', $id)
        ;
        return $qb->getQuery()
                  ->getOneOrNullResult();
        ;
    }