Как использовать построитель запросов в доктрине, чтобы проверить, установлено ли хотя бы одно из двух заданных значений в базе данных - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть таблица с именем Code, которая имеет id, code и creationDate.

Давайте предположим, что у меня есть объект, который я хочу вставить в эту таблицу,но я хочу проверить, существует ли уже объект с тем же набором id или с тем же code.

Я уже понял, что это невозможно сделать с помощью findBy()или findByOne() и что мне, скорее всего, придется использовать QueryBuilder.

Однако есть пара вещей, которые я не могу понять.Я действительно удивлен, что не могу найти ответ на этот вопрос во всей сети ...

Во-первых, это мой текущий код запроса:

$query = $this->entityManager->createQueryBuilder()->select('id', 'X')->from('Code', 'X')->where('id = 3');

Как видите, янаписал «Х» дважды.Может кто-нибудь сказать, пожалуйста, что это?Потому что я должен установить это как-то.Метод from() требует как минимум двух аргументов.Я читал, что это какой-то псевдоним, но зачем мне это объявлять и для чего он нужен?Также я почти на 100% уверен, что синтаксические ошибки тоже есть.(Моя IDE, к сожалению, не помечает синтаксические ошибки или подобные, но это что-то другое.) Я был бы очень признателен, если бы кто-то потратил несколько минут, чтобы объяснить это мне.

Кроме того, как только я объявил свой $query Я должен выполнить это или как?Я действительно понятия не имею, как это работает.Извините, я действительно чувствую себя глупо из-за того, что не могу получить эту наиболее вероятную простую вещь ...

Большое спасибо заранее.

1 Ответ

0 голосов
/ 14 декабря 2018

См. Доктрина - QueryBuilder Во-первых, вам нужно сделать ->getQuery()->getResult() после создания запроса.Это то, что даст вам результаты.

Но вы также можете использовать это, чтобы возвращать только счетчик, поскольку вы просто хотите узнать, есть ли «конфликтующая» запись.

Кроме того, нетнеобходимо объявить псевдоним, поскольку вы включаете только 1 объект.

Редактировать: Добавлены параметры после комментария ОП.

$result = $this->entityManager->createQueryBuilder()
    ->select('c')
    ->from(CodeEntity::class, 'c')
    // Either go with 2 where clauses
    ->where('c.id = :codeId')
    ->orWhere('c.code = :codeCode')
    // Or you could go with a one-liner for the where clause
    //->where('c.id = :codeId or c.code = :codeCode')
    ->setParameters([
        'codeId' => $code->getId(),
        'couponCode' => $code->getCodeCode()
    ])
    ->getQuery() 
    ->getScalarResult()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...