我正在寻找一个解决方案,根据传递的参数使教义DQL语句的andX部分动态:
private function getDiscountPrice(int $weighting, Article $article, Customer $customer, array $args) {
// Get the query builder
$qb = Shopware()->Models()->createQueryBuilder();
$params = new ArrayCollection();
foreach($args as $key => $arg):
$params->set($key,$arg);
endforeach;
$qb->select('discount')
->from('PhaBase\Models\Discount','discount')
->where(
$qb->expr()->andX(
$qb->expr()->eq('discount.kdNr',':kdNr'),
$qb->expr()->eq('discount.pzn',':pzn'),
$qb->expr()->isNotNull('discount.kdNr'),
$qb->expr()->isNotNull('discount.pzn')
)
)
->setParameters($params->toArray());
$discount = null;
try {
$discount = $qb->getQuery()->getOneOrNullResult();
} catch (NonUniqueResultException $e) {
// @TODO Add log entry to inform about Exception
return null;
}
我想以与Parameters相同的方式为andX()参数构建内容,但我不知道如何将动态参数传递给此方法。
谢谢你的建议,迈克尔
2条答案
按热度按时间yacmzcpb1#
以下是解决方案-刚刚找到它:
gpnt7bae2#
可以将
add()
附加表达式直接转换为andX()
或orX()
您可以直接将表达式添加到
andX
表达式中,而不是将表达式添加到ArrayCollection
中(并且只有在主查询中实际存在表达式时才将其添加到主查询中)。对于所需的参数也是如此。有点晚了,但也许对别人有帮助。