Проблема: мне нужно отсортировать список объектов, называемых турнирами, по 3 различным критериям.
- Поле с именем start (timestamp)
- Поле с именем game__id
- Поле с названием platform__id
нет. 3. проблематично c, потому что менеджеры контента CMS (pimcore) хотят следующий порядок: Ps4 -> Xbox -> P c, однако базы данных pimcore генерируются автоматически, и вы не знаете идентификатор платформы, поэтому вы не всегда может полагаться на то, что Ps4 будет первым et c.
Часть решения:
Создайте поле «приоритет» в объектной платформе, с помощью которой команда контента может go в каждом из них и выберите 1, 2, 3, 4 и т. д. c.
Сортируйте эти поля приоритетов (uasort) и затем отображайте турниры по приоритетам платформ (Ps4 -> Xbox -> P c или даже наоборот, если хотите).
Код:
$tournamentList = new Tournament\Listing();
$tournamentList->setCondition("start >= unix_timestamp(NOW() - INTERVAL 1 DAY)"); // fetch only not finished
$tournamentList->setOrder('ASC');
$platformList->getObjects();
$platformObject = $platformList->objects;
uasort($platformObject, function($a, $b) {
if ($a->getPriority() == $b->getPriority()) {
return 0;
}
return ($a->getPriority() > $b->getPriority()) ? +1 : -1;
});
foreach ($platformObject as $platform) {
$priority = $platform->getPriority();
}
$tournamentList->setOrderKey([
"start",
"game__id",
]);
Это то, где я застрял, да, я отфильтровал ввод, и теперь у меня есть 1 , 2, 3, но как сортировать мои турниры по платформам и по приоритетному полю?!