使用Doctrine,使用DQL而不是SQL有什么好处?

Ray*_*Ray 6 php sql orm doctrine dql

在使用Doctrine Classes时,在需要自定义查询时,有人能为我提供一些明确(事实支持)的理由来使用/学习DQL与SQL吗?

我发现如果我不能使用ORM的内置关系功能来实现某些东西,我通常会在扩展的Doctrine或DoctrineTable类中编写自定义方法.在这种方法中,直接在SQL中编写所需的内容(使用具有适当预处理语句/注入保护的PDO等).DQL似乎是学习/调试/维护的另一种语言,似乎没有提供足够令人信服的理由在最常见的情况下使用.为了保证使用,DQL似乎没有SQL那么复杂 - 实际上我怀疑你可以在没有扎实的SQL理解的情况下有效地使用DQL.大多数核心SQL语法端口在您使用PHP的最常见数据库中相当不错.

我错过/忽视了什么?我确信有一个原因,但我想听听那些故意使用它的人以及尝试使用普通SQL的好处.

在传统的LAMP设置(使用mysql,postgres等等)中,我不是在寻找支持ORM的论证,只需要DQL,而不需要在核心"get-by-relationship"类型需求之外做一些事情.

Zel*_*jko 3

老实说,我使用 Doctrine1.2 学习了 SQL :) 我什至不知道外键、级联操作、像 group_concat 这样的复杂函数以及许多其他东西。索引搜索也是非常好用且方便的东西,开箱即用。

DQL 更容易编写和理解代码。例如,这个查询:

$query = ..... // some query for Categories
   ->leftJoin("c.Products p")
Run Code Online (Sandbox Code Playgroud)

它将在类别和产品之间进行左连接,并且您不必编写 ON p.category_id=c.id。

如果将来您将关系从一对多更改为多对多,则相同的查询将无需任何更改即可工作。教义会照顾到这一点。如果您使用 SQL 来执行此操作,则必须更改所有查询以包含该中间多对多表。