- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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/
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以
当我尝试将服务 @doctrine.orm.entity_manager 作为我的监听器 UserDeletionListener 的参数时发生错误。 我的服务: se.doctrine_listen
这个问题在这里已经有了答案: Laravel model with POINT/POLYGON etc. using DB::raw expressions (3 个回答) 1年前关闭。 我正在使用
我最近将一个Laminas项目从信条迁移1.4升级到3.6,并将信条-orm模块从1升级到5.3。在我的部署服务器上,当运行./vendor/bin/stasty-module sync-meta-s
我收到以下 SQL 的“基数冲突”错误: Doctrine\DBAL\Exception\DriverException: 执行时发生异常 SELECT p.* FROM mod_products_p
我想请求您帮助 Doctrine2 DBAL使用 QueryBuilder 构建的查询。我已经习惯了 ORM,但我认为对于在监听器中调用的此类查询来说,这是一种矫枉过正的做法。 我需要使用 SELEC
我想请求您帮助 Doctrine2 DBAL使用 QueryBuilder 构建的查询。我已经习惯了 ORM,但我认为对于在监听器中调用的此类查询来说,这是一种矫枉过正的做法。 我需要使用 SELEC
我正在使用 Doctrine 2,其中我有多个 DBAL 连接。我在 ORM 中也有多个 EntityManager。 我需要能够以某种方式将特定的 DBAL 连接自动连接到其他 Symfony 3
背景 我正在处理的应用程序目前全部使用 mysql_query 语句,我们希望迁移到 Doctrine DBAL。 mysql_query 函数有数千种用法,我们希望使用新的 DBAL 开始新的开发并
我刚刚将 Doctrine DBAL 安装到一个简单的测试 PHP 项目中,并创建了一个测试数据库并成功进行了一些查询。包括同时使用位置参数和命名参数的查询,例如: echo ''; echo 'Si
您好,我有一个在事务中工作的服务,它与远程 API 通信,我想记录此 API 中的每个请求/响应,但如果主事务回滚,任何日志也会回滚。 我的想法是克隆DBAL连接。它会打开第二个没有事务的连接,我可以
我正在尝试创建一个 Doctrine DBAL querybuilder 对象并在其中设置一个参数。(使用 postgres db,dbal 2.3.4, Doctrine $connection =
我将 Symfony2 框架与 Doctrine DBAL 结合使用,并将一些数据插入 MySql 数据库。插入看起来像这样(简化): $conn->insert('sometable', array
我有这个带有子查询的查询。 SELECT * FROM (SELECT module_id FROM an_modules AS m LIMIT 20 OFFSET 0) AS m LEFT JOIN
我正在使用 Doctrine 的枚举类型来跟踪我在 Symfony 应用程序中使用的实体的状态。我正在(大致)使用此处描述的方法: http://docs.doctrine-project.org/p
我不太明白如何在 DBAL 中进行事务处理 我有以下脚本,它根据行的 ID 更新列。我放置了一个表中不存在的假 ID,(因此无法进行更新)但是尽管这是一个事务,但第一个更新已提交。如果其中一个交易失败
是否可以使用 Doctrine DBAL 对 SQLite 数据库进行批量插入?即使以下操作更有效率: $twitter = new TwitterAPIExchange($twitterAuth);
我正在尝试使用 DBAL 查询生成器更新记录,但它似乎不起作用。我试图设置的 data 列只有在我将此处的 test 示例值替换为数字时才有效。 在那种情况下,它会完美地更新我的记录。 即使我也为它使
我有这个简单的例子: $names = ['a', 'b']; $query = $dbConnection->createQueryBuilder(); $query->select('*')
我有这个文件夹结构 [-] myapp/ [+] app/ [-] lib/ [-] vendor/ [-] doctrine/
我是一名优秀的程序员,十分优秀!