Xyz alanı boş olan tüm varlıkları seçmek mümkün müdür?
Böyle bir şey denedim:
->fieldCondition('field_name', 'value', NULL, 'IS NOT NULL');
Ancak, bu işe görünmüyor.
Herhangi bir fikir?
Xyz alanı boş olan tüm varlıkları seçmek mümkün müdür?
Böyle bir şey denedim:
->fieldCondition('field_name', 'value', NULL, 'IS NOT NULL');
Ancak, bu işe görünmüyor.
Herhangi bir fikir?
Yanıtlar:
FieldCondition dokümantasyon sayfasına bakarsanız aşağıdaki uyarıyı göreceksiniz:
Boş alan değerleri olan varlıkların, bu yöntemi kullanırken EntityFieldQuery sonuçlarından çıkarılacağını unutmayın.
Bir alanın var olup olmadığını kontrol etmek Drupal 8'deki entityFieldQuery ürününe eklendiyse de maalesef Drupal 7'ye desteklenmeyecektir .
Bunu başarmak için çeşitli yöntemler vardır:
_
$q = db_select('node', 'n');
$q->fields('n', array('type'))
->condition('n.type', 'my_node_type', '=')
->addJoin('LEFT', 'field_data_field_my_field', 'f', 'f.entity_id = n.nid');
$q->isNull('f.value');
$r = $q->execute();
Kullanabilirsin != NULL
, ama = NULL
nedense kullanamazsın .
Bu benim geçici çözümüm.
//Get all the entities that DO have values
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'MY_TYPE')
->fieldCondition('field_MY_FIELD', 'value', 'NULL', '!=');
$result = $query->execute();
if (is_array(@$result['registration'])) {
//Now get all the other entities, that aren't in the list you just retrieved
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'MY_TYPE')
->entityCondition('entity_id', array_keys($result['MY_TYPE']), 'NOT IN');
$result_two = $query->execute();
}
Belgelere göre null ve isnull kullanabilirsiniz; Sadece yazmak için özel bir yol var.
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'article')
->propertyCondition('status', 1)
->fieldCondition('field_news_types', 'value', 'spotlight', '=')
->fieldCondition('field_photo', 'fid', 'NULL', '!=')
->fieldCondition('field_faculty_tag', 'tid', $value)
->fieldCondition('field_news_publishdate', 'value', $year. '%', 'like')
->range(0, 10)
->addMetaData('account', user_load(1)); // run the query as user 1
$result = $query->execute();
if (isset($result['node'])) {
$news_items_nids = array_keys($result['node']);
$news_items = entity_load('node', $news_items_nids);
}
Kısa cevap doğrudan, hayır yapamazsınız (bkz. EntityFieldQuery isNull veya isNotNull'u desteklemiyor ). Eğer doğru hatırlıyorsam, bu tabloları birleştirmek EntityFieldQuery
için sadece INNER JOIN
s kullanan gerçeğinin bir yan etkisidir .
Bununla birlikte, hook_query_TAG_alter()
bir etiket kullanmak ve kendinize bir etiket eklemek de dahil olmak üzere bir geçici çözüm var, EntityFieldQuery
yukarıdan bağlantı verdiğim sayfadaki son yorumda bir örnek var.
Drupal 7'de lütfen burada önerilen aşağıdaki geçici çözümü kontrol edin :
Sorgu örneğini değiştirmek için etiketi kaydedin:
<?php
/**
* Implements hook_query_TAG_alter()
*/
function MYMODULE_query_node_is_not_tagged_alter(QueryAlterableInterface $query) {
$query->leftJoin('field_data_field_tags', 'o', 'node.nid = o.entity_id AND o.entity_type = :entity_type');
$query->isNull('o.field_tags_tid');
}
?>
Obs .: Bu sorgu etiketi sadece "düğüm" varlık tipi için çalışıyor. "Etiketler" kelimesiyle ilgili "field_tags" kelimelerini karıştırmayın, "Kategoriler" gibi herhangi bir başka olabilir.
EntityFieldQuery kullanılarak etiketlenmemiş tüm düğümleri henüz etiketlemedi, addTag () yöntemine bakın:
<?php
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'news')
->addTag('node_is_not_tagged')
->propertyCondition('status', 1);
$result = $query->execute();
?>
Diğer örnek:
$result = $query
->entityCondition('entity_type', 'node')
->propertyCondition('type', 'my_content_type')
->fieldCondition('field_mine_one', 'value', '', '<>')
->fieldCondition('field_mine_two', 'value', '', '<>')
->addTag('my_custom_tag')
->deleted(FALSE)
->propertyOrderBy('changed', 'DESC')
->range(0, $my_range_value)
->execute();
Sonra sadece benim tarafımdan belirlenen
hook_query_TAG_alter
gerçeği kaldırarak uyguladımmy_custom_tag
:
/**
* Implements hook_query_TAG_alter()
*/
function MYMODULE_query_TAG_alter(QueryAlterableInterface $query) {
$query->leftJoin('field_data_field_other', 'o', 'node.nid = o.entity_id');
$query->isNull('o.field_other_value');
}
Başka bir örnek:
<?php
//Get all the entities that DO have values
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'MY_TYPE')
->fieldCondition('field_MY_FIELD', 'value', 'NULL', '!=');
$result = $query->execute();
if (is_array(@$result['registration'])) {
//Now get all the other entities, that aren't in the list you just retrieved
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'MY_TYPE')
->entityCondition('entity_id', array_keys($result['MY_TYPE']), 'NOT IN');
$result_two = $query->execute();
}
?>
Aşağıda taksonominin boşa attığı ve bazı değişikliklerin uygulandığı boş bir düğüm düğümünün cron görevine yüklendiği daha eksiksiz bir örnek verilmiştir:
/**
* Implements hook_cron().
*/
function MYMODULE_cron() {
$query = new EntityFieldQuery();
$query
->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'property')
->propertyOrderBy('changed', 'DESC')
->addTag('type_is_null')
->range(0,50); // Maximum of 50.
$result = $query->execute();
if (!empty($result['node'])) {
$nids = array_keys($result['node']);
$nodes = node_load_multiple($nids);
foreach ($nodes as $node) {
// do_some_stuff($node);
}
}
}
/**
* Implements hook_query_TAG_alter()
*/
function MYMODULE_query_type_is_null_alter(QueryAlterableInterface $query) {
$query->leftJoin('field_data_field_foo', 'f', 'node.nid = f.entity_id AND f.entity_type = :entity_type');
$query->isNull('f.field_foo_tid'); // Check name by SQL: DESC field_data_field_foo
$query->leftJoin('field_data_field_bar', 'b', 'node.nid = b.entity_id AND b.entity_type = :entity_type');
$query->isNull('b.field_bar_tid'); // Check name by SQL: DESC field_data_field_bar
}
Yanılıyorsam lütfen beni düzeltin. Sadece olması gereken görünüyor
$query->fieldCondition('field_name');
boş bir field_name
alanı olan tüm düğümleri dışlamak için o_O
Drupal'da test edilmiştir version >= 7.43
.