У меня есть запрос, который ищет ключевое слово из разных столбцов
$queryBuilder = $this->entityManager->getRepository(Contact::class)->createQueryBuilder("o");
$queryBuilder->where($queryBuilder->expr()->orX(
$queryBuilder->expr()->like("o.FirstName", ":name"),
$queryBuilder->expr()->like("o.Surname", ":name"),
$queryBuilder->expr()->like("o.Email", ":name"),
$queryBuilder->expr()->like("o.Biography", ":name"),
$queryBuilder->expr()->like("o.Department", ":name"),
$queryBuilder->expr()->like("p.Name", ":name"),
$queryBuilder->expr()->like("pc.Name", ":name"),
$queryBuilder->expr()->like("CONCAT(o.FirstName, ' ', o.Surname)", ":name")
))
->leftJoin(ContactPublication::class, "c", "WITH", "o.ID = c.Contact_ID")
->leftJoin(Publication::class, "p", "WITH", "p.ID = c.Publication_ID")
->leftJoin(Publication::class, "pc", "WITH", "pc.Contact_ID = o.ID")
->setParameter("name", "%" . $value . "%");
$query = $queryBuilder->getQuery();
$contacts = $query->getResult();
Единственная проблема заключается в том, что мне нужно привести строки, которые наиболее соответствуют, с двумя столбцами o.FirstName
и o.Surname
.
Например, если у меня есть ключевое слово abc
, и это ключевое слово приносит мне три строки.
Первая строка имеет abc
совпадение в ее o.Biography
столбце
Втораястрока имеет abc
совпадение в своем o.FirstName
столбце
Третья строка имеет abc
совпадение в своем o.Surname
столбце
Я хочу получить данные, отсортированные как:
1-й ряд abc
соответствует в столбце o.FirstName
2-й ряд abc
соответствует в столбце o.Surname
3-й ряд abc
соответствует в столбце o.Biography
Есть ли в доктрине фильтр, который это делает?