/** * Returns a TupleComparison object that can be used for matching all the fields * from $keys with the tuple values in $filter using the provided operator. * * @param \Cake\ORM\Query $query Target table's query * @param array $keys the fields that should be used for filtering * @param mixed $filter the value that should be used to match for $key * @param string $operator The operator for comparing the tuples * @return \Cake\Database\Expression\TupleComparison */ protected function _createTupleCondition($query, $keys, $filter, $operator) { $types = []; $defaults = $query->defaultTypes(); foreach ($keys as $k) { if (isset($defaults[$k])) { $types[] = $defaults[$k]; } } return new TupleComparison($keys, $filter, $types, $operator); }
/** * Appends any conditions required to load the relevant set of records in the * target table query given a filter key and some filtering values. * * @param \Cake\ORM\Query $query Target table's query * @param string $key the fields that should be used for filtering * @param mixed $filter the value that should be used to match for $key * @return \Cake\ORM\Query */ protected function _addFilteringCondition($query, $key, $filter) { if (is_array($key)) { $types = []; $defaults = $query->defaultTypes(); foreach ($key as $k) { if (isset($defaults[$k])) { $types[] = $defaults[$k]; } } return $query->andWhere(new TupleComparison($key, $filter, $types, 'IN')); } return $query->andWhere([$key . ' IN' => $filter]); }