problem mit doctrine query seit sw 5.1.x (RuntimeException: Cannot select distinct identifiers from)

hallo zusammen,

seit sw 5.1.x geht ein doctrine query nicht mehr und ich komm nicht drauf warum.

lauft auf sw 4.3.x - 5.0.x ohne probleme.

folgendes wird gemacht:

per hook (Shopware\Models\Order\Repository::getBackendOrdersQueryBuilder::after)

lass ich mir den builder geben.

diesen erweitere ich mit einem select, leftJoin und orderBy.

jetzt bekomm ich diesen fehler wenn ich nach meinem select sortiere:

Fatal error: Uncaught exception 'RuntimeException' with message 'Cannot select distinct identifiers from query with LIMIT and ORDER BY on a column from a fetch joined to-many association. Use output walkers.' in /var/www/clients/client2/web4/web/sw51/vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php:149 Stack trace: #0 /var/www/clients/client2/web4/web/sw51/vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php(74): Doctrine\ORM\Tools\Pagination\LimitSubqueryWalker->validate(Object(Doctrine\ORM\Query\AST\SelectStatement)) #1 /var/www/clients/client2/web4/web/sw51/vendor/doctrine/orm/lib/Doctrine/ORM/Query/TreeWalkerChain.php(113): Doctrine\ORM\Tools\Pagination\LimitSubqueryWalker->walkSelectStatement(Object(Doctrine\ORM\Query\AST\SelectStatement)) #2 /var/www/clients/client2/web4/web/sw51/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php(380): Doctrine\ORM\Query\TreeWalkerChain->walkSelectStatement(Object(Doctrine\ORM\Query\AST\SelectStatement)) #3 /var/www/clients/cl in /var/www/clients/client2/web4/web/sw51/vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php on line 149
503 Service Unavailable

nutz ich orderBy mit einem standard (z.b. orders.id) läufts wieder.

nur nicht mit meiner ergänzung.

kann mir einer auf die sprünge helfen, danke.

// edit

hab noch etwas rumgetestet.

folgendes hab ich in der /engine/Shopware/Controllers/Backend/Order.php gemacht:

in der methode getList() 

$sort = array(array('property' => 'details.id', 'direction' => 'DESC'));

als standard wert eingetragen und /backend/Order/getList ausgeführt.

  • SW 5.0.x läuft

  • SW 5.1.x fehler

    $sort = array(array(‘property’ => ‘payment.id’, ‘direction’ => ‘DESC’));

  • SW 5.0.x läuft

  • SW 5.1.x läuft

unterschied ist

details

[details] => Array
(
	[0] => Array
	(
		[id] => 3
		...
	)

)

payment

[payment] => Array
(
	[id] => 5
	...
)

 

* push

liebes SWAG team,

könnte sich das mal jemand ansehen und sagen warum sich das verhalten geändert hat und deshalb ein fehler ausgegeben wird.
ich hab leider keine lösung gefunden :frowning:

tach zusammen,

wäre jemand so nett und könnte folgende query mal ab V 5.1.1 testen:

// geht nicht bei 5.1.x, aber auf 5.0.x
$sort = array(array('property' => 'details.id', 'direction' => 'DESC'));
// default geht
//$sort = array(array('property' => 'orders.id', 'direction' => 'DESC'));

$builder = Shopware()->Models()->createQueryBuilder();
$builder->select(array(
	'orders',
	'details',
	'customer',
	'payment',
	'billing',
	'billingCountry',
	'billingState',
	'shop',
	'dispatch',
	'paymentStatus',
	'orderStatus',
	'billingAttribute',
	'attribute'
));

$builder->from('Shopware\Models\Order\Order', 'orders');
$builder->leftJoin('orders.payment', 'payment')
		->leftJoin('orders.paymentStatus', 'paymentStatus')
		->leftJoin('orders.orderStatus', 'orderStatus')
		->leftJoin('orders.billing', 'billing')
		->leftJoin('orders.customer', 'customer')
		->leftJoin('orders.details', 'details')
		->leftJoin('billing.country', 'billingCountry')
		->leftJoin('billing.state', 'billingState')
		->leftJoin('orders.shop', 'shop')
		->leftJoin('orders.dispatch', 'dispatch')
		->leftJoin('billing.attribute', 'billingAttribute')
		->leftJoin('orders.attribute', 'attribute')
		->setFirstResult(0)
		->setMaxResults(10)
		->addOrderBy($sort);

$query = $builder->getQuery();
$query->setHydrationMode(\Doctrine\ORM\AbstractQuery::HYDRATE_ARRAY);
$paginator = $this->getModelManager()->createPaginator($query);
$total = $paginator->count();
die(''.print_r($paginator->getIterator()->getArrayCopy(), true).'');