2012-02-20 86 views
0

我是来自Drupal 6的Drupal 7的新手。在6中,我用于构建自定义模块并使用标准db_query查询CCK字段。在这样做的时候,我能够使用诸如JOIN和LOWER(REPLACE(n.title, ' ', '_')) = '%s'之类的东西。Drupal 7 EntityFieldQuery

我想知道是否有办法使用EntityFieldQuery。 EFQ背后的概念看起来很简单,但就现场条件而言,它看起来像我只能使用运算符来检查特定字段的值。如果我想使用上面的代码来检查转换后的值是否等于我的值,该怎么办?

因为它加载了执行查询和获取NID和VID所需的内容,所以好像我不需要使用JOIN,因为它考虑了指定内容类型所需的所有内容。使用:

$query->entityCondition('bundle', array('article', 'page')); 

$query->propertyCondition('type', array('article', 'page', 'blog')); 

实际上是相同的连接语句?这两个语句是否都使用NID来加入各种内容类型?

感谢, 豪伊

回答

0

一个EntityFieldQuery的主要好处是,它并不关心你用的是什么领域的后端。要做到这一点,它不会提供复杂的操作,因为它必须支持也适用于像MongoDB这样的后端的选项子集。

如果您必须在SQL中对字段值执行如此复杂的查询,也许最好重新考虑您的字段模式。