使用 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_ida_attr 等属性的 Entity-A (a),不如使用 idattribute 等。我假设您只是将代码概括为问题,您的项目中可能有更好的 属性 名称。

让我知道 DQL 对您的影响如何。