首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Drupal实体查询条件下使用字段的修改(计算)值?

问如何在Drupal实体查询条件下使用字段的修改(计算)值?
EN

Drupal用户
提问于 2020-12-07 20:12:13
回答 1查看 41关注 0票数 0

我有一个内容类型的链接字段。我正在实现一个验证,如果已经使用了,用户就不能在字段中输入域名。为此,我需要一种从字段值(完整url)派生域的直接方法,以便与输入的url的域名进行比较。

代码语言:javascript
复制
$result = \Drupal::entityQuery('node')
->condition('type', 'ABC')
->condition('field_1', parse_url($url_entered)['host']->execute();

问题是field_1是一个完整的url,因为我只想对域名进行验证。

是否可以使用实体查询?如果没有,有什么建议吗?

EN

回答 1

Drupal用户

发布于 2020-12-07 21:35:35

为此,您可以在查询中使用 like 操作符,如下所示:

代码语言:javascript
复制
$host = parse_url($url_entered)['host'];
$result = \Drupal::entityQuery('node')
  ->condition('type', 'ABC')
  ->condition('field_link', "%" . $host . "%", 'LIKE')->execute();

UPDATE如果要检查确切的主机是否存在,则应选择字段的所有值,然后与输入的主机进行比较。

代码语言:javascript
复制
$host = parse_url($url_entered)['host'];
// Select all uris of field link.
$database = \Drupal::database();
$query = $database->select('node__field_link', 'nfl')
  ->condition('nfl.bundle', 'page')
  ->fields('nfl', ['field_link_uri']);
$result = $query->execute()->fetchAll(PDO::FETCH_COLUMN, 0);
$hosts = [];
// extract all hosts.
foreach ($result as $item){
  $hosts[] = parse_url($item)['host'];
}
// Check if the host already exist.
if (in_array($host, $hosts)){
  // Do what you want ici !
}
票数 0
EN
页面原文内容由Drupal提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://drupal.stackexchange.com/questions/298651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档