从 Doctrine ORM QueryBuilder 中的实体的两列获取数据
Get data from two columns for entity in Doctrine ORM QueryBuilder
我在使用 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 个表中获取 select 中列出的数据)
使用 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();
效果是从数据库中查询数据正确,但是映射数据到对象时失败。它 returns 包含 2 个项目的数组(第一个是 City 对象,第二个是 name_pl 字符串和值)insead 只是 City 对象的列表(并且 name_pl 作为 City 对象的一个字段)
尝试:
$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();
我在使用 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 个表中获取 select 中列出的数据)
使用 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();
效果是从数据库中查询数据正确,但是映射数据到对象时失败。它 returns 包含 2 个项目的数组(第一个是 City 对象,第二个是 name_pl 字符串和值)insead 只是 City 对象的列表(并且 name_pl 作为 City 对象的一个字段)
尝试:
$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();