Doctrine-当主键不等于外键时如何获取记录

问题描述 投票:0回答:1

我正在通过开发Symfony应用程序来学习教义,我的代码有问题。我正在尝试从flashcards表中获取所有记录,但那些记录都放在trash表中。换句话说,我需要trash表中不存在的抽认卡。

trashflashcards与一对一关系相关。 flashcards's主键是trash's外键,所以我尝试了如下操作:

$qb = $this->createQueryBuilder('f');
$expr = $qb->expr();

$query = $qb
    ->join('f.trash', 't')
    ->andWhere($expr->neq('t.flashcard', 'f.id'))
    ->getQuery()
    ->getResult();

查询已正确执行,没有错误,也没有返回的记录。

请问您能不能写出为什么此ORM代码不返回任何记录,您能给我一些提示使其工作吗?

提前感谢您的回答!

php symfony doctrine
1个回答
1
投票
OUTER JOIN

哪里表A =抽认卡,表B =垃圾箱;

获取示例的示例:

SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name WHERE TableB.id IS null

more read on possible joins and their queries

使用Doctrine不会强制您使用其queryBuilder,也可以在Docktrine中使用普通的SQL。

您所需要的就是自行构建查询,并使用documentation中的Doctrine连接执行查询:

use Doctrine\DBAL\DriverManager; $conn = DriverManager::getConnection($params, $config); $sql = "SELECT * FROM articles"; $stmt = $conn->query($sql);

在Doctrine中,没有正确的联接,也没有外部联接,我的猜测是这是由于项目的本质,它是简单性,更重要的是可移植性。

也许,如果您想给查询生成器最后一次尝试,此question也会以某种方式为您提供帮助。
© www.soinside.com 2019 - 2024. All rights reserved.