У меня есть запрос, который ищет ключевое слово из разных столбцов
$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
колонка
Есть ли в доктрине фильтр, который это делает?
Задача ещё не решена.
Других решений пока нет …