当前位置: 首页 > 知识库问答 >
问题:

如何更改查询以包含联接表中的数据?

郝哲茂
2023-03-14

我有简单的实体:

id
username
guard

“guard”是来自同一实体的另一个用户的id。我必须使用简单表格渲染视图:

username | name of guard
-------------------------
John     | Bob

我试图通过询问来做到这一点:

$ur = $this->getDoctrine()->getRepository(User::class)->createQueryBuilder('u')
            ->leftJoin(User::class, 'u2', \Doctrine\ORM\Query\Expr\Join::WITH, 'u.guard = u2.id')
            ->getQuery()
            ->getResult();

但它只给我id和用户名,没有连接数据。我知道整个查询应该是这样的:

SELECT 
  * 
FROM 
  user u0_ 
  LEFT JOIN user u1_ ON (u0_.guard = u1_.id)

但我找不到通过QueryBuilder实现该功能,然后在twig模板中访问该功能的方法

当做

共有1个答案

杜昆琦
2023-03-14

好的,我发现了代码中的错误:

  1. 我试着设置一个一个的不动产,这是一个小错误,但我需要在这里多个一个

    /**
     * Many Users have One Guard (User)
     * @ORM\ManyToOne(targetEntity="User")
     */
    private $guard = 0;

当我这样做的时候,Symfony自动强迫我更改代码,在“guard”列中,我必须插入User对象。

在这之后,我不再需要连接——只需从表中选择数据,保护列就包含了我可以在Twig中使用的用户对象,等等。


    namespace AppBundle\Entity;
    use Doctrine\ORM\EntityRepository;

    class UserRepository extends EntityRepository
    {
        public function findAllDB()
        {
            $qb = $this->createQueryBuilder('u');
            $query = $qb->getQuery();
            return $query->execute();
        }
    }

 类似资料:
  • 现在,如果有3个表涉及这样的东西,我希望这样做。 我的问题基本上是...是否可以在语句上执行3个表联接?正确的语法是什么?谢谢你。我做...

  • 我在Oracle SQL Developer中创建了三个表,即 。表是连接表,因为和之间的关系是。 在hibernate中,我为和表创建了两个hibernate类和, 和表在hibernate类中定义如下: 我用一些记录填充了表和,连接表自动填充了一些记录。现在我目前面临的问题是,我想使用hiberante在连接表上使用一个简单的选择语句,如下所示: 我怎么能做到这一点,尽管联接表'Employe

  • 问题内容: 我有一个在SQL中完美运行的查询,但是我有最糟糕的时间将其转换为linq。该表(下面的表1)保存了多种记录类型的状态更改。联接需要设置两个字段以创建有效联接:SubmissionId(状态所属的表的pk)和SubmissionTypeId(确定状态所属的表)。 我已经尝试过使用x.DefaultIfEmpty()中的y到x进行多次迭代,并且无法在正确的位置设置where子句。我需要从T

  • 问题内容: 如何使用查询语句更改表名? 我使用以下语法,但在SQL Server 2005中找不到重命名关键字。 问题答案: 使用sp_rename: 您可以在MSDN上找到有关此过程的文档。 如果需要包括模式名称,则只能将其包含在第一个参数中(也就是说,不能将其用于将表从一个模式移动到另一个模式)。因此,例如,这是有效的:

  • 下面的查询几乎给了我正确的计数,除了它包括具有重复p.promo_code和子值的行。如何使用DISTINCTp.promo_code查询? 我已经尝试了一些我在SO上看到的用于单连接查询的解决方案,比如---sum*COUNT(DISTINCT p.promo_code,submitid)/COUNT(*) 不走运。以下是完整的查询: 它运行得很快,解释计划看起来不错,但由于数据重复,目前有2个

  • 问题内容: 编辑,根据以下答案略微更改了代码,但仍无法正常工作。 我还添加了一条日志消息,告诉我getCount是否返回> 0,并且确实如此,所以我认为查询可能有问题吗?或我对光标的使用。 我已经创建了一个表,我想检查它是否为空,如果它为空,我想运行一些插入语句(存储在数组中)。 下面是我的代码,虽然我没有错误,但是当我拉出.db文件时,我可以看到它不起作用。您将如何解决这个问题? 抱歉,如果这是