如何使用Doctrine 2.0 ORM模型选择数据库数据?

3
最近我开始学习使用PHP的Doctrine 2.0框架。现在我已经成功地利用了一些Doctrine的东西(使用MySQL),使用定义的XML模型插入了一些数据,但是现在我在选择数据方面遇到了问题。无论是在Doctrine网站还是其他地方,我都发现数据是通过DQL或原始SQL进行选择的。但是这样做,我就失去了ORM带来的一半优势。我该如何使用纯ORM选择数据,例如我可以在Java中使用Hibernate那样的方式?
以下是我正在使用的Doctrine网站上的一些映射XML示例:
<?xml version="1.0" encoding="UTF-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
                    http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">

      <entity name="Product" table="products">
          <id name="id" type="integer" column="product_id">
              <generator strategy="AUTO" />
          </id>

          <field name="name" column="product_name" type="string" />
      </entity>
</doctrine-mapping>

你有阅读过关于关联映射的文档吗?你想要选择什么内容? - Orbling
@Orbling:我还没有开始学习关联,现在我正在尝试找出如何检索数据。例如,在这里,我想获取Product类的实例,就像我使用EntityManager::persist()插入的那样。 - Erveron
所以字面上通过ID检索单个实体? $product = $entityManager->find('Product', 123); 最好在开始之前阅读所有文档。 - Orbling
2个回答

2
最简单的读取数据方式是使用EntityManager->find(),你需要将要加载的类作为第一个参数(一个字符串),将该实体的ID作为第二个参数传入。我最近也开始使用Doctrine 2,我能给你的最好建议就是阅读Orbling上面链接的所有文档,并使用注释而不是XML(至少在开始时)。希望对你有所帮助。

我会尝试使用它,谢谢建议。我习惯于使用Java Hibernate中的XML映射,这对我来说是更好的习惯。 - Erveron
@James:就像Robin上面说的,以及我在评论中提到的,你必须在真正开始之前阅读和消化所有文档。否则,你最终会以一种笨拙的方式完成任务。 - Orbling

1
起初我也错过了这一点,但重要的是要理解的是DQL不理解表的概念(请阅读注释DQL不是SQL),它是纯面向对象的查询。也就是说,您查询的是模型,而不是直接查询数据库。
手册本身指出DQL“非常类似于Hibernate查询语言”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接