symfony - 使用Doctrine时如何获取join ID?
问题描述
我正在做我公司的一个项目。但是,我对教义并不熟悉。我是老式的查询人。
Table-A 和 Table-B 是一对多的关系,通过 Table-B 上的“a_id”链接起来。在实体 B 中,指定了 $a_name。
表-A
a_id
a_name
a_attr
表-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。如何使用实体 A 的 ID(表 B 上的 a_id)“索引”和“位置”?
谢谢。
解决方案
为您的 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)
我们只需向 Entity-A 添加一个连接,在 select 中包含 a.id,然后按 a.id 进行索引。
当我们在理论中处理实体时,我们需要加入实体以获取其 id,然后按其索引。此外,每个实体中的属性命名可能更简单、更直观。因此,不是 Entity-A (a) 具有属性a_id
,a_attr
等,而是使用id
,attribute
等。我假设您只是概括了问题的代码,并且您的项目中可能有更好的属性名称。
让我知道 DQL 如何为您服务。
推荐阅读
- powershell - 如何以编程方式在 Exchange Online 中批量添加/编辑/删除 GAL 全局地址列表中的条目
- laravel - Laravel - 根据登录表单上的语言字段将用户重定向到自定义网址
- parse-platform - iOS Parse Server 在运行时设置服务器 url 而无需重新启动应用程序
- php - 卷曲错误:操作被回调中止
- scala - 为 sbt 提取项目
- python - 如何过滤包含格式为 yyyyMmm 的日期的列?
- android - 自定义 ImageSpan 无法正确显示
- google-sheets - 如何使用 SUMIFS 连接两个 google sheet 工作簿?
- emacs - emacs 作为其他应用程序的外部编辑器(Houdini、Joplin)
- c++ - cpp:通过传递给构造函数的类型定义类成员变量类型