使用 Doctrine 时如何获取加入 ID?
How to get the join ID when using Doctrine?
我正在做我公司的一个项目。但是,我不熟悉教义。我是老式的查询专家。
Table-A和Table-B是一对多的关系,通过"a_id"连接在Table-B上。在实体 B 中,指定了 $a_name。
Table-A
a_id
a_name
a_attr
Table-B
b_id
a_id
b_name
b_attr
实体-B
/**
* @ORM\ManyToOne(targetEntity="EntityA")
* @ORM\JoinColumn(name="a_id", referencedColumnName="a_id")
* @var Timezone
*/
protected $a_name;
现在我正在编写一个方法来使用 IN()
获取一组记录
/**
* @param array $ids
*
* @return array
*/
public function getByIds($ids) {
$query = $this->getEntityManager()->createQuery('SELECT t FROM Entity-B t INDEX BY t.id WHERE t.id IN (:ids)');
}
上面的 "INDEX" 和 "WHERE" 行带有 Entity-B ID。我如何 "INDEX" 和 "WHERE" 使用实体 A 的 ID(a_id 在 Table-B 上)?
谢谢。
为您的 DQL 尝试这个或类似的方法:
SELECT a.a_id, t.b_id, t.b_name, t.b_attr FROM Entity-B t LEFT JOIN t.a_name a INDEX BY a.id WHERE a.a_id IN (:ids)
我们只需添加一个连接到实体 A,在 select 中包含 a.id,然后按 a.id 索引。
当我们在 doctrine 中处理实体时,我们需要加入实体以获取其 id,然后对其进行索引。此外,每个实体中的属性命名可以更简单、更直观。因此,与其使用 a_id
、a_attr
等属性的 Entity-A (a),不如使用 id
、attribute
等。我假设您只是将代码概括为问题,您的项目中可能有更好的 属性 名称。
让我知道 DQL 对您的影响如何。
我正在做我公司的一个项目。但是,我不熟悉教义。我是老式的查询专家。
Table-A和Table-B是一对多的关系,通过"a_id"连接在Table-B上。在实体 B 中,指定了 $a_name。
Table-A
a_id
a_name
a_attr
Table-B
b_id
a_id
b_name
b_attr
实体-B
/**
* @ORM\ManyToOne(targetEntity="EntityA")
* @ORM\JoinColumn(name="a_id", referencedColumnName="a_id")
* @var Timezone
*/
protected $a_name;
现在我正在编写一个方法来使用 IN()
获取一组记录/**
* @param array $ids
*
* @return array
*/
public function getByIds($ids) {
$query = $this->getEntityManager()->createQuery('SELECT t FROM Entity-B t INDEX BY t.id WHERE t.id IN (:ids)');
}
上面的 "INDEX" 和 "WHERE" 行带有 Entity-B ID。我如何 "INDEX" 和 "WHERE" 使用实体 A 的 ID(a_id 在 Table-B 上)?
谢谢。
为您的 DQL 尝试这个或类似的方法:
SELECT a.a_id, t.b_id, t.b_name, t.b_attr FROM Entity-B t LEFT JOIN t.a_name a INDEX BY a.id WHERE a.a_id IN (:ids)
我们只需添加一个连接到实体 A,在 select 中包含 a.id,然后按 a.id 索引。
当我们在 doctrine 中处理实体时,我们需要加入实体以获取其 id,然后对其进行索引。此外,每个实体中的属性命名可以更简单、更直观。因此,与其使用 a_id
、a_attr
等属性的 Entity-A (a),不如使用 id
、attribute
等。我假设您只是将代码概括为问题,您的项目中可能有更好的 属性 名称。
让我知道 DQL 对您的影响如何。