Bug #85788
closedEscaping behaviour changed in QueryBuilder
0%
Description
In 7.6 the code below works without any problems. In 8.7 the code below crashes, because the ordering gets escaped in other way, so that it is not possible to implement functions like this anymore.
To be more specific the setOrderings function with the input of orderByField causes the crash.
Code:
public function findByUids($uids){
if(!isset($uids) || empty($uids)){
return NULL;
}
$uidListString = $uids;
if(!is_array($uids)){
$uidListString = explode(',', $uids);
}
$query = $this->createQuery();
$query->getQuerySettings()->setRespectStoragePage(FALSE);
//here i set the orderings
$orderings = $this->orderByField('uid', $uidListString);
$query->setOrderings($orderings);
$query->matching(
$query->logicalAnd(
$query->in('uid', $uidListString)
)
);
return $query->execute();
}
/**
* @param string $field
* @param array $values
*
* @return array
*/
protected function orderByField($field, $values) {
$orderings = array();
foreach ($values as $value) {
$orderings["$field={$value}"] = \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_DESCENDING;
}
return $orderings;
}
Updated by Stephan Großberndt over 6 years ago
- Project changed from 9 to TYPO3 Core
- Category set to Database API (Doctrine DBAL)
- TYPO3 Version set to 8
Updated by Timo Pfeffer over 5 years ago
Please lookup this ticket or close it if already obsolete or fixed.
Updated by Susanne Moog over 4 years ago
- Status changed from New to Needs Feedback
I don't quite get the bug.
setOrderings is documented as:
Sets the property names to order the result by. Expected like this: array( 'foo' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING, 'bar' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_DESCENDING )
from what I can see, that has not changed at all and should continue to work as documented.
If I read your code right, you are not using a property name as key there and that broke. That in itself is no bug, as it was not documented and expected behaviour to work, however: Are you able to achieve what you want to achieve in another way with the API? For example by using Doctrine directly?
Updated by Christian Kuhn almost 3 years ago
- Status changed from Needs Feedback to Closed
Hey. I hope it's ok to close here due to lack of further feedback.