| Q | A
|------------ | ------
| BC Break | no
| Version | 2.6.3
If you use Criteria::exp()->in() on relation collection, in this case ManyToMany, the query built in method ::loadCriteria translate are wrong.
foreach ($parameters as $parameter) {
[$name, $value, $operator] = $parameter;
$field = $this->quoteStrategy->getColumnName($name, $targetClass, $this->platform);
$whereClauses[] = sprintf('te.%s %s ?', $field, $operator);
$params[] = $value;
}
are translated to this
WHERE t.region_id = ? AND te.status IN ?' with params [1, ["finished","error"]]
but should end up like this
WHERE t.region_id = ? AND te.status IN (?,?)' with params [1, ["finished","error"]]
It should be enough if someone add something like this:
if (is_array($value)) {
$whereClauses[] = sprintf('te.%s IN (' . str_repeat('?,', count($value) - 1) . '?)', $field);
$params = array_merge($params, $value);
}
else {
$whereClauses[] = sprintf('te.%s %s ?', $field, $operator);
$params[] = $value;
}
After deep inspect I suppose whole ManyToManyPersister should be reworked. It works with database but missing all SQL translation techniks from BasicEntityPersister, so most of advanced queries are invalid. For example LIKE is translated to CONTIANS, IN don't expand parameters before query execution. There is a lot of work 馃槥
@bednic would you be able to send us a failing functional test case that reproduces this issue (targetting 2.6)? It would help us a lot to find a way to fix things :+1:
Most helpful comment
After deep inspect I suppose whole ManyToManyPersister should be reworked. It works with database but missing all SQL translation techniks from BasicEntityPersister, so most of advanced queries are invalid. For example LIKE is translated to CONTIANS, IN don't expand parameters before query execution. There is a lot of work 馃槥