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。