通过Symfony2 / Doctrine中的相关实体访问存储库

时间:2012-06-07 04:00:56

标签: symfony doctrine

这类似于之前发布的这个问题: In Symfony2, should I use an Entity or a custom Repository

假设我有一个汽车实体和一个车轮实体。一辆车有很多车轮,但车轮只有一辆车。

在我的控制器中,我已经可以使用汽车了。我正在使用这种关系来获得属于汽车的轮子。

$car = $this->getCar();
$wheels= $car->getWheels();

上述工作使我能够访问属于当前汽车的车轮。但是我不需要使用所有车轮,而只需要平坦= 0的车轮。

有没有比存储库更好的方法来获取属于car实体的轮子,其中flat = 0?

我在考虑在汽车实体中创建一个吸气剂(getNonFlatWheels)然后过滤车轮,以便只返回非扁平车轮。

似乎会有更标准的解决方案。

2 个答案:

答案 0 :(得分:3)

Simone的答案应该这样做,但同样,这取决于你的实体结构以及你想用你的$ wheels对象做什么。

例如,假设您安装了最新版本的Twig,您可以遍历$ wheels,只保留flat = 0的那些:

{% for wheel in wheels if wheel.flat == 0 %}
    //do whatever
{% endfor %}

希望它有用

答案 1 :(得分:2)

我不知道你的实体结构,但在类似的情况下我使用这段代码。您可以尝试将其放在CarRepository类中。

/**
 * Get all non flat wheels
 *
 * @return Result
 */
public function getNonFlatWheels()
{
    $em = $this->getEntityManager();

    $query = $em
            ->createQuery("
                SELECT g
                FROM Acme\DemoBundle\Entity\Car c
                JOIN c.wheels w
                WHERE w.flat = :flat
            ")
            ->setParameter('flat', 0);

    return $query->getResult();
}

我希望它会对你有所帮助。