Bir düğümü alan değerine göre nasıl yükleyebilirim?


19

Belirli bir düğümü yüklemek istiyorum. Düğümün kimliğini bilmiyorum ama benzersiz olan belirli bir karma alanı olduğunu biliyorum ve bu karma değerini biliyorum.

Düğümü karma alanı üzerinden yüklemek istiyorum. Bunu nasıl yapabilirim?

Yanıtlar:


14

EntityFieldQuery kullanarak elde edebilirsiniz.

D8 için EntityFieldQuery yeniden yazılmıştır.

Drupal 8:

$query = \Drupal::entityQuery('entity_test');
$default_langcode_group = $query->andConditionGroup()
  ->condition('user_id', $properties[$default_langcode]['user_id'], '=', $default_langcode)
  ->condition('name', $properties[$default_langcode]['name'], '=', $default_langcode);
$langcode_group = $query->andConditionGroup()
  ->condition('name', $properties[$langcode]['name'], '=', $langcode)
  ->condition("$this->field_name.value", $field_value, '=', $langcode);
$result = $query
  ->condition('langcode', $default_langcode)
  ->condition($default_langcode_group)
  ->condition($langcode_group)
  ->sort('name', 'ASC', $default_langcode)
  ->execute();

Bir varlığın alanının değerlerini nasıl getirebilirim?

$query = \Drupal::entityQuery('node')
    ->condition('status', 1)
    ->condition('changed', REQUEST_TIME, '<')
    ->condition('title', 'cat', 'CONTAINS')
    ->condition('field_tags.entity.name', 'cats');

$nids = $query->execute();

Bu doğru anlıyorsam, bu bir grup düğüm kimlikleri döndürecektir (veya duruma bağlı olarak bir veya hiçbiri), ancak yine de Node::adı geçen düğümleri yüklemek için kullanmak zorundayım, doğru mu?
Andrew

Evet haklısın.
DRUPWAY

31

Belirli bir düğümü alan değerine göre yüklemenin en hızlı yolu yöntemi kullanmaktır loadByProperties().

Bir veya daha fazla alan değeri belirtirsiniz ve döndürülen alan, alan değerleriyle eşleşen düğümleri içeren bir dizidir:

$nodes = \Drupal::entityTypeManager()
  ->getStorage('node')
  ->loadByProperties(['title' => $title]);

Normalde düğümler üzerinde döngü yaparsınız. Sizin durumunuzda belirli bir düğüm arıyorsunuz. Dizide tek bir düğüm de döndürülür, bu nedenle uygulayın reset()ve hiçbir şey bulunamazsa bu düğümü veya NULL değerini döndürür:

if ($node = reset($nodes)) {
  // found $node that matches the title
}

1
Benim durumumda $node = reset...hash benzersiz olduğundan kodun ( ) ikinci kısmı gerek olmaz varsayalım .
Andrew

3
Tek düğüm hala bir dizide. $ Node = $ nodes [0] kullanabilirsiniz, ancak daha sonra hata günlüğünde uyarıları önlemek için bir düğüm olup olmadığını kontrol etmeniz gerekir. reset () daha iyidir çünkü sessizce NULL döndürür.
4k4

Bunun için tüm upvotes neden emin değilim; asıl soru, alana göre bir düğüm yüklemek. Mülk (Başlık gibi) bir alan değildir.
liquidcms

@liquidcms, title bir düğüm alanıdır ve başka bir düğüm alanını kullanabilirsiniz. BTW Drupal alanları bir veya daha fazla özelliğe sahiptir. Tek bir özellikse, Drupal çoğu kez özellik adı değerini kullanır. Bu nedenle çoğu alan için her iki terim de değiştirilebilir.
4k4

İki farklı alanı sorgulamak için bu örneğe bakın drupal.stackexchange.com/questions/250306/…
4k4
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.