【问题标题】:Doctrine createQueryBuilder - How get data from foreign keyDoctrine createQueryBuilder - 如何从外键获取数据
【发布时间】:2023-02-02 23:01:04
【问题描述】:

我有两个使用 make:entity 创建的数据库表

  • 参与者(id、名字、姓氏、年龄、性别、学校*、组*、...)
  • 学校(id,名字)

Participant 有一个字段“school”,它存储一个 id,它也是一个外键,指向 school 表中的一个条目。

在我的前端,我只想显示参与者表字段的一个子集。 一个简单的解决方案是跳过不相关的字段,但 participant_table.twig 模板在我的应用程序中被多次使用。 应该有不同的视图来显示更多或更少的参与者数据,具体取决于谁在使用视图。 这种方法会导致模板中的逻辑过多,无法控制要显示/隐藏的内容。

所以我需要在 ParticipantRepository.php 类中构建一个自定义查询,它将数据传递给模板。

例子: $query = "participant.Firstname, participant.Lastname, participant.Age, participant.Gender ..."

现在是棘手的部分:如何通过外键获取学校名称?

最后我想要一个具有以下结构的数组:

[
  0 => [     
    "Firstname" => "Jon"     
    "Lastname" => "Doe"     
    "Age" => 6     
    "Gender" => "m"     
    "School" => "School X"   
  ]   
  1 => [
    "Firstname" => "Mike"     
    "Lastname" => "Doe"     
    "Age" => 10     
    "Gender" => "m"     
    "School" => "School Y"   
  ]   
  ... 
]

在 Symfony、Doctrine 文档、Stack Overflow 中搜索..

【问题讨论】:

  • 如果模板中有 Participant 实体,{{ participant.school.name }} 是否不起作用?
  • 我没有遵循你问题的模板部分,但如果你想要的只是一个数组数组,那么下拉到 sql 并查询给定视图的确切需求。

标签: symfony doctrine


【解决方案1】:

您可以通过在 ParticipantRepository.php 类的自定义查询中使用联接来实现此目的。连接将允许您根据参与者表中的外键从学校表中获取学校名称。这是一个例子:

$query = $this->createQueryBuilder('p')
->select('p.Firstname', 'p.Lastname', 'p.Age', 'p.Gender', 's.name as School')
->join('p.school', 's')
->getQuery();

$result = $query->getArrayResult();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-30
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 2012-12-12
    • 1970-01-01
    相关资源
    最近更新 更多