从Doctrine ORM QueryBuilder中的实体的两列中获取数据

时间:2018-05-17 13:37:48

标签: php symfony orm doctrine dql

使用Doctrine queryBuilder获取数据时遇到此问题。

如何更改此SQL:

SELECT c.*, ct.value as name_pl
FROM cities c
LEFT JOIN cities_translations ct ON c.id = ct.city_id AND ct.language_code = 'pl'

(从2个表格中选择列出的数据)

使用Doctrine Query Builder进入DQL?

我已经有了这个实体:

/**
 * @ORM\Entity()
 */
class City
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue
     */
    public $id

    /**
     * @ORM\Column(type="string", length=255)
     */
    public $slug;

    /**
     * @ORM\Column(type="string", length=255)
     */
    public $name;

    /**
     * @ORM\OneToMany(targetEntity="CityTranslation", mappedBy="city")
     */
    public $translations;
}

使用查询构建器进行查询:

$queryBuilder
        ->select('c, ct.value as name_pl')
        ->from('cities', 'c')
        ->leftJoin('c.translations', 'ct', Join::WITH, 'ct.language_code = pl')
        ->getQuery()
        ->getResult();

效果是它从数据库中正确查询数据,但在将数据映射到对象时失败。它返回包含2个项目的数组(第一个是City对象,第二个是name_pl字符串和值)insead只是City对象的列表(和name_pl作为City对象的字段)

1 个答案:

答案 0 :(得分:0)

尝试:

$queryBuilder
        ->select('c', 'c')
        ->from('cities', 'c')
        ->leftJoin('c.translations', 'ct', Join::WITH, 'ct.language_code = pl')
        ->addSelect('ct', 'ct')
        ->addSelect('ct.value', 'name_pl')
        ->getQuery()
        ->getResult();