getField(); if (!is_array($fields)) { return; } $value = $expression->getValue(); $op = $expression->getOperator(); $true = new QueryExpression('1'); if ($value instanceof Query) { $selected = array_values($value->clause('select')); foreach ($fields as $i => $field) { $value->andWhere([$field . " $op" => new IdentifierExpression($selected[$i])]); } $value->select($true, true); $expression->setField($true); $expression->setOperator('='); return; } $surrogate = $query->getConnection() ->newQuery() ->select($true); if (!is_array(current($value))) { $value = [$value]; } $conditions = ['OR' => []]; foreach ($value as $tuple) { $item = []; foreach (array_values($tuple) as $i => $value) { $item[] = [$fields[$i] => $value]; } $conditions['OR'][] = $item; } $surrogate->where($conditions); $expression->setField($true); $expression->setValue($surrogate); $expression->setOperator('='); } }