如何通过 Doctrine QueryBuilder 从 SQL 构建查询?

How to build query from SQL by Doctrine QueryBuilder?

我是 Doctrine ORM 的新手,我需要有关构建 QueryBuilder 命令的帮助。我有一个 SQL 命令,我需要隐蔽到 QueryBuilder。

$qb = $this->entityManager->createQueryBuilder();

SQL是:

SELECT `user`.*
FROM `user`
JOIN `friends` ON `user`.`id` != $uid AND  (`user`.`id` = `friends`.`origin` OR  `user`.`id` = `friends`.`destination`)
WHERE `friends`.`origin` = $uid OR `friends`.`destination` = $uid;

`user` 是 App\Model\Database\Entity\User `friends` 是 App\Model\Database\Entity\Friends

$uid是我想见其好友的用户。作为查询的结果,我需要 User 个实体数组。

Friends 很简单 table 具有唯一 ID 和 origindestination,它们是 User ID,当我想向某人询问时友谊,origin 将是我的 UID,destination 将是他的 UID。上面这个功能是为了让用户加好友,不管谁叫的加好友。

有人可以帮我吗?

我想您可以将 SQL 转换为 DQL,它看起来类似于

SELECT u
FROM App\Model\Database\Entity\User  u
JOIN App\Model\Database\Entity\Friends f WITH u.id != :uid 
    AND  (u.id = f.origin OR  u.id = f.destination)
WHERE f.origin = :uid OR f.destination = :uid

在查询生成器中,您可以将其写为

$em->createQuery('
        SELECT u
        FROM App\Model\Database\Entity\User  u
        JOIN App\Model\Database\Entity\Friends f WITH u.id != :uid 
            AND  (u.id = f.origin OR  u.id = f.destination)
        WHERE f.origin = :uid OR f.destination = :uid'
        )->setParameters(array(
            'uid' => $uid
        ));