文章实体有一个无限的多值分类法参考字段field_article_countries,引用分类法词汇表Countries,用户实体有一个单一值分类法参考字段field_user_countries,该字段引用相同的分类法词汇表Countries。
通过编程,并与一篇特定的文章相比,我希望将具有field_user_countries值=的所有用户加载到多值分类法参考字段field_article_countries中可用的值之一。
示例:假设Article "ABC"具有值的field_article_countries:
User "A"将field_user_countries设置为:
User "B"将field_user_countries设置为:
User "C"的field_user_countries设置为:
我希望以编程的方式,并基于Article "ABC",只加载用户A和用户B。
Below是我的代码:
// 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.
}The问题是只加载了一个用户,而不是所有用户!
知道我的代码有什么问题吗?
发布于 2020-04-28 09:42:06
$Article_Countries = $article->field_article_countries->getString();
这将返回一个字符串
->condition('field_user_countries', $Article_Countries, 'IN')
从医生那里,带有IN的condition接受一个数组。
因此,您需要$Article_Countries作为实体ID的数组。我的第一个想法是使用$article->field_article_countries->referencedEntities()来获取一个对象数组,然后让它们构建一个ID数组,但这有点过于周密了。因此,我寻找了一种更整洁的方法,并找到了这样的方法:http://drupal.stackexchange.com/a/207715/89581,它建议:
$ids = array_column($entity->field->getValue(), 'target_id');
https://drupal.stackexchange.com/questions/293196
复制相似问题