Я считаю практически невозможным достичь желаемого результата, после стольких попыток с различными решениями (подзапрос, необработанный запрос и т. Д.), Найденных здесь и на других сайтах, я должен задать этот вопрос.
Моя цель состоит в том, чтобы извлекать / получать каждый рейтинг «проектов» на основе их «баллов».
Рассматривать "Score" как int и со значениями, такими как 1,2,6,4,8,10,200 и т. Д.
Ранг будет выглядеть следующим образом:
Ранг- Оценка
- 200
- 10
- 8
- 6
Для моего вопроса, чтобы быть простым иочистить, насколько это возможно, я переименовал мои фактические таблицы / сущности, как показано ниже:
MainEntity (main_table):
/**
* @ORM\Id
* @ORM\Column(name="id")
* @ORM\GeneratedValue
*/
protected $id;
// other fields, un-related to this question
/**
* @ORM\OneToOne(targetEntity="Application\Entity\SecondTable", mappedBy="second_table_data")
*/
protected $second_table;
/**
* @ORM\OneToOne(targetEntity="Application\Entity\ThirdTable", mappedBy="third_table_data")
*
*/
protected $third_table;
SecondEntity (second_table):
/**
* @ORM\Id
* @ORM\Column(name="id")
* @ORM\GeneratedValue
*/
protected $id;
// other fields, un-related to this question
/**
* @ORM\OneToOne(targetEntity="Application\Entity\SecondTable", inversedBy="second_table")
* @ORM\JoinColumn(name="project_id", referencedColumnName="id")
*/
private $second_table_data;
ThirdEntity (third_table):
/**
* @ORM\Id
* @ORM\Column(name="id")
* @ORM\GeneratedValue
*/
protected $id;
// other fields, un-related to this question
/**
* @ORM\Column(name="score")
*/
protected $score;
/**
* @ORM\OneToOne(targetEntity="Application\Entity\ThirdTable", inversedBy="third_table")
* @ORM\JoinColumn(name="project_id", referencedColumnName="id")
*/
private $third_table_data;
И функция хранилища для выбора «всех проектов» в порядке их оценки:
public function findAllProjects()
{
$entityManager = $this->getEntityManager();
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder->select('u')
->from(MainEntity::class, 'u')
->leftJoin('u.third_table', 't')
->orderBy('t.score', 'DESC');
return $queryBuilder->getQuery()->getResult();
}
Это прекрасно работает (я считаю), поскольку я получаю все "проекты" из main_table + second_table + third_table на основе их "project_id".
Однако проблема в том, что я не могу найти способ правильно рассчитать или получить номер ранга каждого проекта. Я также попытался использовать «foreach» и использовать «index» в качестве «rank», но это не будет работать должным образом, потому что я использую ORMPaginator , поэтому каждый раз, когда вы нажимаете «страницу», которая «foreach» »index "будет сброшен с 0.
Я надеюсь, что вопрос достаточно ясен и дает вам четкое понимание моей проблемы.
Пожалуйста, посоветуйте, как мне этого добиться, и если весь мой подход кэто неправильно, пожалуйста, укажите.
Каждый совет / подсказка / решение высоко ценится.