2013-12-12 8 views
5

で空のフィールドを持つ行をフィルタリング、IのようなEFQ要求を有しています。このフィールドで注文すると、ヌル値を持つすべての行が除外されます。この行動を避け、結果にとどまる方法を教えてください。並べ替え基準は、例えばEntityFieldQuery

+0

drupal.orgを検索して気付いたことがあるように、あなたの問題はワームの可能性があります。あなたのフィールドをヌル可能にすることはできますか? – pamatt

+0

絶対に、それは本当に悪いです!これを回避する方法はまったくありません。 –

+0

もし私たちがMysqlに関して語っているのであれば、 'field_code IS NULL'のような順序条件を追加すべきです。しかし、EFQについて話したら、それは簡単ではありません。おそらく、あなたはhook_entity_query_alterを使ってEFQを変更し、独自の関数にqueryCallbackを変更することができます。 – Maxim

答えて

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つの異なるフィールドで注文しようとしているされていますか?

+0

私はそれをできるだけ早く試してみよう! 私は似たようなことを書こうとしましたが、EFQでdb_or()を使用することは不可能です。 日付とコードでノードを注文する必要があるので、私たちはそれを注文する必要があります –

+0

はい、それは動作しますが、EFQではありません。 –

関連する問題