gpt4 book ai didi

symfony - 教义 : ORM QueryBuilder or DBAL QueryBuilder

转载 作者:行者123 更新时间:2023-12-02 16:48:24 27 4
gpt4 key购买 nike

DBAL 查询生成器: http://www.doctrine-project.org/api/dbal/2.3/class-Doctrine.DBAL.Query.QueryBuilder.html

ORM 查询生成器: http://www.doctrine-project.org/api/orm/2.3/class-Doctrine.ORM.QueryBuilder.html

Doctrine 内部有 2 个非常相似的 QueryBuilder,即 DBAL 和 ORM。

这两个有什么区别?与 DBAL 相比,使用 ORM queryBuilder 的开销是否很大?

(原生查询是不可能的,因为我需要使用动态 where 语句)

最佳答案

如果您使用ORM,请选择ORM。否则你应该只使用DBAL。您可以在下面找到有关他们实际做什么的一些详细信息。

DBAL 代表数据库抽象层。它尝试抽象尽可能多的数据库特定内容,例如驱动程序或查询语法,因此它们可以互换,而无需更改代码。

ORM 代表对象关系映射,它比 DBAL 更进一步,它尝试将数据库架构绑定(bind)到应用程序中的实际类。

这两个都带有查询生成器。 DBAL 查询生成器更为基本,因为它仅提供与多个驱动程序/数据库的兼容性。您仍然对表进行操作,并且仍然得到行作为结果。另一方面,ORM 查询生成器旨在处理实体(数据库模式绑定(bind)到的类)。

例如,DBAL 查询:

$builder->select('u.id, e.id, e.email')
->from('users', 'u')
->leftJoin('u', 'emails', 'e', 'u.id = e.user_id')
->where('u.id = :id')
->setParameter(':id', $id);

$rows = $builder->execute()->fetchAll();

在这里,我们创建一个连接 users 的查询表 emails表,获取 ID 为 $id 的用户的所有电子邮件地址。结果将采用关联数组的形式。现在让我们看一下 ORM:

$builder->select('u','e')
->leftJoin('u.emails', 'e')
->where('u.id = :id')
->setParameter(':id', $id);

$user = $builder->getQuery()->getOneOrNullResult();

在这里,我们说我们想要得到 User id $id与他所有的Email电子邮件地址。我们不关心它们来自哪张表或者它们之间的关系是什么。你得到的是 User 的一个实例包含 Email 集合的类对象。由于 ORM 映射,所有内容都填充了正确的数据。

关于symfony - 教义 : ORM QueryBuilder or DBAL QueryBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36959801/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com