У меня есть эта структура таблицы:
CREATE TABLE `inventory_item` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`articleID` int(11) NOT NULL,
`quantity` int(11) NOT NULL,
`date` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
И у меня есть этот запрос:
$rows = $this->getModelManager()->createQueryBuilder()
->select('ii')
->from(InventoryItem::class, 'ii')
->where('ii.articleId IN (:articleIds)')
->andWhere('ii.quantity > 0')
->orderBy('ii.date', 'ASC')
->setParameter('articleIds', $articleIds )
->getQuery()
->getResult();
В базе данных я могу иметь сущности, которые выглядят так:
ID | ArticleID | Quantity | Date
1 | 100 | 10 | 2018-08-31
2 | 200 | 20 | 2018-07-31
3 | 100 | 40 | 2018-05-31
Теперь, когда $ articleIds в запросе равен 100, 200, я хочу получить такой вывод:
ID | ArticleID | Quantity | Date
2 | 200 | 20 | 2018-07-31
3 | 100 | 40 | 2018-05-31
Итак, когда ArticleID равен, запрос должен вернуть только сущность с самой младшей датой,но также сущность с ArticleId = 200.
Есть ли возможность в построителе запросов доктрины достичь этого?Я попробовал это с groupBy, но это не работает, так как orderBy не влияет на результат при использовании groupBy.
Спасибо!