public ManyToOneHelper::addFilter()
File
- core/modules/views/src/ManyToOneHelper.php, line 255
Class
- ManyToOneHelper
- This many to one helper object is used on both arguments and filters.
Namespace
Drupal\views
Code
public function addFilter() { if (empty($this->handler->value)) { return; } $this->handler->ensureMyTable(); // Shorten some variables: $field = $this->getField(); $options = $this->handler->options; $operator = $this->handler->operator; $formula = !empty($this->formula); $value = $this->handler->value; if (empty($options['group'])) { $options['group'] = 0; } // add_condition determines whether a single expression is enough(FALSE) or the // conditions should be added via an db_or()/db_and() (TRUE). $add_condition = TRUE; if ($operator == 'not') { $value = NULL; $operator = 'IS NULL'; $add_condition = FALSE; } elseif ($operator == 'or' && empty($options['reduce_duplicates'])) { if (count($value) > 1) { $operator = 'IN'; } else { $value = is_array($value) ? array_pop($value) : $value; $operator = '='; } $add_condition = FALSE; } if (!$add_condition) { if ($formula) { $placeholder = $this->placeholder(); if ($operator == 'IN') { $operator = "$operator IN($placeholder)"; } else { $operator = "$operator $placeholder"; } $placeholders = array( $placeholder => $value, ); $this->handler->query->addWhereExpression($options['group'], "$field $operator", $placeholders); } else { $placeholder = $this->placeholder(); if (count($this->handler->value) > 1) { $placeholder .= '[]'; if ($operator == 'IS NULL') { $this->handler->query->addWhereExpression(0, "$field $operator"); } else { $this->handler->query->addWhereExpression(0, "$field $operator($placeholder)", array($placeholder => $value)); } } else { if ($operator == 'IS NULL') { $this->handler->query->addWhereExpression(0, "$field $operator"); } else { $this->handler->query->addWhereExpression(0, "$field $operator $placeholder", array($placeholder => $value)); } } } } if ($add_condition) { $field = $this->handler->realField; $clause = $operator == 'or' ? db_or() : db_and(); foreach ($this->handler->tableAliases as $value => $alias) { $clause->condition("$alias.$field", $value); } // implode on either AND or OR. $this->handler->query->addWhere($options['group'], $clause); } }
Please login to continue.