boş alanla satır filtreler. Bu alana göre sipariş verdiğimde, null değeri olan tüm satırları hariç tutacaktır. Bu davranış nasıl önlenir ve sonuçta kalsın?OrderBy Örneğin, ben gibi bir EFQ isteği var EntityFieldQuery
cevap
Son zamanlarda buna benzer bir sorunu bir db_select() kullanarak ve sadece isNull ve isNotNull için bir db_or() geçirerek çözmem gerekti. Bir EFQ'nun ihtiyacınız olanı yapacak kadar esnek olduğunu düşünmüyorum. Bu çizgisinde bir şey çalışmalıdır: gerçi
$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;
}
Bir soru - neden gidip örnekte 2 farklı alanlara göre sipariş çalışıyoruz edilir?
En kısa zamanda deneyeceğim! Benzer bir şey yazmayı deniyorum, ancak EFQ'da db_or() öğesini kullanmak imkansız. Düğüm tarihine göre & kodla sipariş vermeliyim çünkü bir tarihte birçok düğümümüz var, bu yüzden sipariş vermemiz gerekiyor –
Evet, işe yarıyor ama ... EFQ ile değil .. bunun için çok fazla –
drupal.org'da arama yaparak fark etmiş olabileceğiniz gibi, sorununuz bir solucan olabilir ... Alanınızı nealable yapma şansınız yok mu? – pamatt
Kesinlikle değil, gerçekten kötü! Bunu geçmek için kesinlikle bir yolu yok mu? –
Eğer Mysql cinsinden konuşursak, 'field_code IS NULL' gibi bir sipariş koşulu eklemelisiniz. Fakat EFQ hakkında konuşursak bu kolay değildir. Belki de hook_entity_query_alter ile EFQ'yi değiştirebilir ve queryCallback'i kendi işlevinize dönüştürebilirsiniz. – Maxim