Я написал в своем репозитории функцию поиска, которая принимает строковый запрос.
При этом он выполняет быстрый запрос с поиском по подстановочным знакам в заголовке объекта в поисках совпадения для первого бита заголовка.
После этого я выполняю второй запрос (поскольку Doctrine2 не поддерживает союзы), чтобы выполнить общий поиск по подстановочным знакам по всему заголовку.
Очевидно, это будет означать, что он получает те же результаты, что и предыдущий запрос. Итак, я хочу сообщить DQL во втором запросе, чтобы игнорировать уже полученные результаты.
Но я просто не знаю, как это вообще предоставить
Вот моя функция поиска:< /p>
Код: Выделить всё
public function search($search) {
$query = $this->getEntityManager()->createQueryBuilder();
$query->select('v')
->from($this->getEntityName(), 'v')
->where($query->expr()->like('v.title', $query->expr()->literal(sprintf('%s%%', $search))));
$set1 = $query->getQuery()->getResult();
$query->where(
$query->expr()->andX(
$query->expr()->like('v.title', $query->expr()->literal(sprintf('%%%s%%', $search))),
$query->expr()->notIn('v', $set1) // Trying to provide the already acquired set of the results, to negate from this query
)
);
$set2 = $query->getQuery()->getResult();
$result = array_merge($set1, $set2);
return $result;
}
Это может показаться претенциозным, но я бы не хотел писать цикл по первому набору только для извлечения массива идентификаторов, чтобы предоставить второй набор для отрицания. Я знаю, что DQL поддерживает чтение полных объектов сущностей и массивов полных объектов, но я уверен, что просто не наткнулся на правильный метод предиката, который знает, как его использовать.
Подробнее здесь: https://stackoverflow.com/questions/253 ... ted-result