我有一个情况我需要查询一些节点和连接两个连接到该节点的字段。这两个字段都可以具有无限的值,因此字段表中有多行。我试图让它返回字段中找到的nid和所有值记录。的Drupal 7选择查询连接
$query = db_select('node', 'n');
$query->leftJoin('field_data_aaa_alert_path', 'ap', 'n.nid = ap.entity_id');
$query->leftJoin('field_data_aaa_alert_region', 'ar', 'n.nid = ar.entity_id');
$query
->fields('n', array('nid'))
->fields('ap', array('aaa_alert_path_value'))
->fields('ar', array('aaa_alert_region_value'))
->groupBy('n.nid')
->condition('type', 'aaa_alert')
->condition('status', 1)
->orderBy('created', 'DESC');
$result = $query->execute();
while($record = $result->fetchAssoc()){
//...
}
这工作,但它只会返回1个记录aaa_alert_path_value和aaa_alert_region_value时,其实还有更多。
然后我试图尝试模块EntityFieldQuery Extra Fields
$query = new EntityFieldQueryExtraFields();
$query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'aaa_alert')
->propertyCondition('status', NODE_PUBLISHED)
->addExtraField('aaa_alert_region', 'value')
->addExtraField('aaa_alert_path', 'value')
->propertyOrderBy('created', 'DESC');
$result = $query->execute();
这工作,将返回所有的记录,这两个领域,我需要,但有这个模块中的错误,如果两个一个不会返回任何东西字段不包含记录。
我已经尝试使用不同的连接,但我似乎无法得到它的权利。我在这里错过了什么?我试图做到这一点,而不使用EntityFieldQuery
类,因为它会要求我返回所有返回的结果以获取我需要的字段,这是巨大的性能影响。与->groupBy('n.nid')
谢谢!完美的作品 –