OrderBy过滤掉EntityFieldQuery中带空字段的行

时间:2013-12-12 10:37:10

标签: drupal drupal-7

例如,我有一个EFQ请求,如:

$query  ->entityCondition('entity_type', 'node')
        ->entityCondition('bundle', 'contenttype')    
        ->propertyCondition('status', 1)
        ->propertyCondition('language', $language->language, '=')
        ->fieldOrderBy('field_date', 'value', 'DESC')
        ->fieldOrderBy('field_code', 'value', 'DESC')

field_code可以为空。当我按此字段排序时,它将排除所有获得空值的行。如何避免这种行为并让他们留在结果中?

1 个答案:

答案 0 :(得分:3)

我最近不得不通过使用db_select()并仅为isNull和isNotNull传递db_or()来解决与此类似的问题。我认为EFQ不够灵活,无法满足您的需求。有些事情应该有效:

$query = db_select('node', 'n')
->fields('n')
->condition('n.type', 'contenttype')
->condition('n.status', 1)
->leftJoin('field_data_field_code', 'c', 'n.nid = c.entity_id')
->fields('c');

$db_or = db_or();
$db_or->isNull('c.field_code_value');
$db_or->isNotNull('c.field_code_value');

$query->condition($db_or);

$query->orderBy('c.field_code_value', 'DESC');

$results = $query->execute()->fetchAllAssoc('nid');

if ($results) {
    $nodes = node_load_multiple(array_keys($results));
    return $nodes;
}

但有一个问题 - 为什么你要在你的例子中尝试按2个不同的字段排序?