我有一个内容类型的链接字段。我正在实现一个验证,如果已经使用了,用户就不能在字段中输入域名。为此,我需要一种从字段值(完整url)派生域的直接方法,以便与输入的url的域名进行比较。
$result = \Drupal::entityQuery('node')
->condition('type', 'ABC')
->condition('field_1', parse_url($url_entered)['host']->execute();问题是field_1是一个完整的url,因为我只想对域名进行验证。
是否可以使用实体查询?如果没有,有什么建议吗?
发布于 2020-12-07 21:35:35
为此,您可以在查询中使用 like 操作符,如下所示:
$host = parse_url($url_entered)['host'];
$result = \Drupal::entityQuery('node')
->condition('type', 'ABC')
->condition('field_link', "%" . $host . "%", 'LIKE')->execute();UPDATE如果要检查确切的主机是否存在,则应选择字段的所有值,然后与输入的主机进行比较。
$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 !
}https://drupal.stackexchange.com/questions/298651
复制相似问题