如何与孩子一起去?

时间:2018-02-05 10:38:04

标签: php mysql sql symfony symfony-3.3

我有简单的查询:

    $query = $qb->select('c, s')
        ->from('AppBundle:City', 'c')
        ->leftJoin('c.streets', 's')
        ->where('o.name = :name')
            ->setParameter('name', 'London')
        ->andWhere('s.numbers > :number')
            ->setParameter('number', 10000);

    $result = $query->getQuery()->getOneOrNullResult();

我想通过关系获得城市和街道。如果城市和街道的数字> 10000存在此查询工作正常,但如果城市存在且没有数字> 10000然后此查询返回null。为什么,如果我使用leftJoin,不加入?

即使城市没有街道,我怎样才能获得城市?

1 个答案:

答案 0 :(得分:0)

如果您的实体City实体已映射到您的{% for steet in city.streets %} <div>steet.name</div> <div>steet.length</div> <div>steet.etc</div> {% endfor %} 实体,那么您不需要此类查询。

在树枝上,只需这样做:

public function getCityStreets(City $city, $street) {
    // param $city :: Entity City
    // param $street :: Integer
    return $this->createQueryBuilder()
                ->select('c', 's')
                ->from('AppBundle:City', 'c')
                ->join('AppBundle:Streets', 's')
                ->where('c.name = :city')
                ->andWhere('s.number = :street_number')
                ->andWhere('s.city = :street_city)
                ->setParameters(array(
                    new Parameter('city', $city->getName()),
                    new Parameter('street', $street),
                    new Parameter('street_city', $city->getId()),
                ))
                ->getQuery()
                ->getArrayResult();
}

否则,要更正您的查询,它应该是这样的:

o.name
  • o在您的查询中无效... 'c.streets', 's'未设置在任何地方
  • Steets也无效,您可以加入City,但不能加入leftJoin
  • 的列 您将join映射到Streets时,
  • City可以是street.city,不应该有NULL src值< / LI>

良好做法提示:实体名称永远不会复数