【问题标题】:Symfony Doctrine createQueryBuilder From() alias not workingSymfony Doctrine createQueryBuilder From() 别名不起作用
【发布时间】:2017-06-09 17:40:49
【问题描述】:

当尝试执行这个查询时它会抱怨:

[2/2] QueryException: [Semantical Error] line 0, col 443 near 'User 用户左':错误:未定义类“用户”。

我什至不知道为什么我需要在我的 from 中使用别名,但我在那里添加了它并且它不起作用。

实体类名是“用户”

    $query = $em->createQueryBuilder()
        ->from('User','user')
        ->select('user.email,
                person.givenName,
                person.familyName,
                contactPoint.contactInfo,
                organization.legalName,
                postalAddress.streetAddress1,
                postalAddress.streetAddress2,
                postalAddress.city,
                postalAddress.postalCode,
                country.name,
                region.name')

        ->leftJoin('person', 'WITH', "user.person_id=person.id")
        ->leftJoin('contactPoint', 'WITH', "person.contactPoint_id=contactPoint.id")
        ->leftJoin('organization', 'WITH', "person.organization_id=organization.id")
        ->leftJoin('postalAddress', 'WITH', "organization.postal_address_id=postalAddress.id")
        ->leftJoin('country', 'WITH', "postalAddress.country_id=country.id")
        ->leftJoin('region', 'WITH', "postalAddress.region_id=region.id")
        ->where("user.email = '$email' ")
        ->getQuery();
    dump($query->getArrayResult());die();

更新的工作查询 //////////////////

$user = $this->get('security.token_storage')->getToken()->getUser();

    $email = $user->getEmail();

    $query = $em->createQueryBuilder()
        ->from(User::class,'user')
        ->select('user.email,
                person.givenName,
                person.familyName,
                contactPoint.contactInfo,
                organization.legalName,
                postalAddress.streetAddress1,
                postalAddress.streetAddress2,
                postalAddress.city,
                postalAddress.postalCode,
                country.name,
                region.name')

        ->leftJoin(Person::class, 'person', 'WITH', "user.accountOwner=person.id")
        ->leftJoin(ContactPoint::class, 'contactPoint', 'WITH', "person.contactPoint=contactPoint.id")
        ->leftJoin(Organization::class, 'organization', 'WITH', "person.organization=organization.id")
        ->leftJoin(PostalAddress::class, 'postalAddress', 'WITH', "organization.postalAddress=postalAddress.id")
        ->leftJoin(Country::class, 'country', 'WITH', "postalAddress.country=country.id")
        ->leftJoin(Region::class, 'region', 'WITH', "postalAddress.region=region.id")
        ->where("user.email = '$email' ")
        ->getQuery();
    dump($query->getResult());die();

【问题讨论】:

  • 这里是修改后的工作查询

标签: php symfony doctrine-orm


【解决方案1】:

你应该使用完全限定的类名,试试:

    ->from(User::class,'user')

而不是

    ->from('User','user')

更笼统,参考 Symfony Doctrine 的documentation

您需要考虑选择 PHP 对象,而不是行 在数据库中。因此,您从 AppBundle:Product 实体(可选的快捷方式) AppBundle\Entity\Product class),然后将其别名为p

所以你应该在DQL语句中使用类的字段而不是表的列名。

希望有帮助

【讨论】:

  • 感谢帮助没有在任何文档中看到该示例,现在它抱怨我在连接中的 peron 应该是类名或实际表名? [语义错误] 第 0 行,第 484 列靠近“带左的人”:错误:未定义“人”类。
  • 看来我需要将所有联接更改为 ClassName::class, 'alias'
  • 现在工作还必须将我的联接的 id 列更改为类属性名称
  • 嗨@user1930591 我更新了我的答案,参考了关于使用对象字段而不是表列的文档。
  • 您好@user1930591,如果此答案解决了您的问题,请单击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。
猜你喜欢
  • 1970-01-01
  • 2020-08-01
  • 1970-01-01
  • 2023-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-13
相关资源
最近更新 更多