如果存在关系,请获取OneToMany“Child”以返回“Parent”对象

Using the doctrine docs example below, I would like to be able to return the all features when querying for a product.

So effectively selecting all products where feature.product_id = product.id

But would like to do this the doctrine object oriented way if possible. Is there any way in doctrine to match these relationships the opposite way?

<?php
use Doctrine\Common\Collections\ArrayCollection;

/** @Entity **/
class Product
{
    // ...
    /**
     * @OneToMany(targetEntity="Feature", mappedBy="product")
     **/
    private $features;
    // ...

    public function __construct() {
        $this->features = new ArrayCollection();
    }
}

/** @Entity **/
class Feature
{
    // ...
    /**
     * @ManyToOne(targetEntity="Product", inversedBy="features")
     * @JoinColumn(name="product_id", referencedColumnName="id")
     **/
    private $product;
    // ...
}

Source: http://doctrine-orm.readthedocs.org/en/latest/reference/association-mapping.html#one-to-many-bidirectional

Thanks,

Selecting a product in this case, where product.id = feature.product_id will only return 1 result, assuming your product table's id is its primary key, auto incremented. Are you sure you're not trying to return all features where feature.product_id == (specific product.id)?

If the latter is the case,

$features = $em->getRepository('MyBundle:Feature')
    ->findBy(
        array('product_id' => $productId)
    );

Where you have the $productId, a unique integer, in hand.