Сравните поле ссылки на сущность с одним значением с полем ссылки на сущность с несколькими значениями
Сущность статьи имеет неограниченное справочное поле таксономии с несколькими значениями field_article_countries
, ссылающееся на словарь таксономии Countries
, а сущность Пользователя имеет справочное поле таксономии с одним значением field_user_countries
, которое ссылается на тот же словарь таксономии Countries
.
Программно и по сравнению с одной конкретной статьей я хочу загрузить всех пользователей, у которых есть значение field_user_countries
= в одно из значений, доступных в справочном поле таксономии с несколькими значениями field_article_countries
.
Пример:
Скажем, Статья "ABC" имеет field_article_countries
со значениями:
- Париж
- Испания
- Лондон
- Италия
Пользователь "A" имеет field_user_countries
значение:
- Испания
Пользователь "B" имеет field_user_countries
значение:
- Италия
И Пользователь "C" имеет field_user_countries
значение:
- Турция
Я хочу программно и на основе Статья "ABC" , для загрузки только пользователя A и пользователя B.
Ниже приведен мой код:
// Get in array, a list of all "Article Countries" available for the loaded article.
$Article_Countries = $article->field_article_countries->getString();
// Get Entity Manager to build your query
$storage = \Drupal::entityTypeManager()
->getStorage('user');
// Get all Users satisfing your conditions
// For Condition Parameters @See: https://www.drupal.org/docs/8/api/database-api/dynamic-queries/conditions
$uids = $storage->getQuery()
->accessCheck(FALSE)
//->condition1
//->condition2
->condition('field_user_countries', $Article_Countries, 'IN')
->execute();
// Load all User entities according to their IDs
$users = \Drupal\user\Entity\User::loadMultiple($uids);
// Loop through loaded users.
foreach ($users as $user) {
// Do something here.
}
Проблема заключается в том, что загружается только один пользователь, а не все пользователи!
Есть идеи, что не так с моим кодом?
1 answers
$Article_Countries = $article->field_article_countries->getString();
Это возвращает строку
->condition('field_user_countries', $Article_Countries, 'IN')
Из документов, condition
с помощью IN
принимает массив.
Итак, вам нужно, чтобы $Article_Countries
был массив идентификаторов сущностей. Моей первой мыслью было $article->field_article_countries->referencedEntities()
получить массив объектов, а затем использовать их для создания массива идентификаторов, но это немного обтекаемо. Поэтому я искал более аккуратный способ и нашел это: http://drupal.stackexchange.com/a/207715/89581 что предполагает:
$ids = array_column($entity->field->getValue(), 'target_id');