Php 如何在symfony中过滤实体中的实体

Php 如何在symfony中过滤实体中的实体,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,我正试图找到在存储库中编写代码的其他方法。我希望你遇到这种情况。我有实体运输实体结果 - id - user - id - name - address - emails[] 1-{ email, date } 2-{ email, date } 3-{ email, date } 但我需要数组的

我正试图找到在存储库中编写代码的其他方法。我希望你遇到这种情况。我有实体运输实体结果

  - id
  - user
     - id
     - name
     - address
  - emails[] 
     1-{
       email,
       date 
     } 
     2-{
       email,
       date 
     } 
     3-{
       email,
       date 
     } 
但我需要数组的最后一封电子邮件,这是我在API中需要的显示

 - id
 - user
   - id
   - name
   - address
 - emails[] 
   3-{
      email,
      date 
   } 
我这里有我的储存库,这将显示运输清单,但电子邮件不会过滤到最后一封电子邮件中

/**
* display transportation list
*/
public function findById($id){

        return $this->createQueryBuilder('t')
            ->leftJoin('t.emails', 'e')
            ->where('t.id = :id')
            ->setParameter(':id', $id)
            ->getQuery()
            ->getResult()[0];

}

我不知道通过将电子邮件过滤到DESC并获取最后一部分是否对这一部分有用。但是如果你有关于如何做的建议。我很乐意为它学习。我不知道如何解决这个问题。我已经在我的运输实体中设置了最后一个功能。但是我的老板想让它在我的运输存储库中添加这个功能。现在,我正在搜索如何解决这个问题。

在您的实体中,$emails字段是doctor\Common\Collections\Collection的一个实例。此接口包含一组有用的方法,可帮助查找集合中的元素。此方法之一是last,它将返回集合中的最后一个实体

您可以向实体添加一个公共方法,该方法将向您发送最后一封电子邮件:

public function getLastEmail()
{
    return $this->emails->last();
}

不能保证电子邮件会按ID排序,但如果您使用YAML文件进行映射,您可以通过在$emails字段或YAML中的类似配置中添加@ORM\OrderBy{ID=ASC}注释来强制执行此操作。

我这样做了,但我的老板希望将其添加到我的运输存储库中,而不是运输实体中。我不知道该怎么做。有些代码与您的代码相同,您必须编写一个自定义查询,使用带有内部选择的JOIN,类似于JOIN select MAXid FROM emails GROUP BY transportation_id。但这太过分了。使用collection方法要简单得多。如果你老板关心的是优化,他可能应该了解。我会检查一下。我将首先搜索该代码。抱歉,不熟悉,您可以考虑在项目中使用LexiFiFrimFielBipe。