如何在条令中使用querybuilder来测试数据库中是否至少设置了两个给定值中的一个

mklgxw1f  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(440)

我有一张table叫 Code ,具有 id , code 和一个 creationDate .
假设我有一个对象,我想把它插入这个表中,但是我想检查是否已经有一个对象具有相同的 id 设置或相同 code .
我已经意识到用这种方法是不可能的 findBy() 或者 findByOne() 我很可能不得不使用querybuilder。
但有几件事我不明白。我真的很惊讶,我在网上找不到答案。。。
首先,这是我当前的查询代码:

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

如你所见,我写了两次“x”。有人能告诉我那是什么吗?因为我得想办法把它调好。这个 from() 方法至少需要两个参数。我读到它是某种别名,但为什么我需要声明它,它有什么目的?另外,我几乎100%肯定也有语法错误(不幸的是,我的ide没有标记语法错误或类似的东西,但那是不同的。)如果有人能花几分钟向我解释这一点,我将不胜感激。
还有,一旦我宣布 $query ,我必须执行它还是什么?我真的不知道这是怎么回事。我很抱歉,我真的觉得自己很愚蠢,因为没有得到这个最简单的东西。。。
事先非常感谢。

kx5bkwkv

kx5bkwkv1#

请参阅条令-首先是querybuilder,您需要这样做 ->getQuery()->getResult() 创建查询之后。这就是结果。
但您也可以使用它来仅返回一个计数,因为您只想知道是否存在“冲突”记录。
另外,由于只包含1个实体,因此不需要声明别名。
编辑:在op的评论后添加参数。

$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()

相关问题