我需要呈现两个关系实体的一些性质Salarie和Contrat,在同一树枝模板,基本上所有的Salarie记录,但只能从一个特定 Contrat 连接到每个Salarie。
实体员工
namespace App\Entity;
class Salarie
{
// ...
/**
* @ORM\OneToMany(targetEntity="App\Entity\Contrat", mappedBy="salarie")
* @ORM\OrderBy({"dateDebut" = "DESC"})
*/
private $contrats;
//...
实体合同
namespace App\Entity;
class Contrat
{
// ...
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Salarie", inversedBy="contrats")
* @ORM\JoinColumn(nullable=false)
*/
private $salarie;
// ...
员工控制器
class SalarieController extends AbstractController
{
/**
* @Route("/", name="salarie_index", methods={"GET"})
*/
public function index(SalarieRepository $salarieRepository): Response
{
return $this->render('salarie/index.html.twig', [
'salaries' => $salarieRepository->findAll(), //findAllWithLastContrat(),
]);
}
乍一看,我认为在 Salarie 存储库中使用自定义查询会很简单,但我一直在与连接、子查询和其他东西作斗争。这是一个纯粹的 Twig 工作解决方案,但它根本不是 DRY,因为我必须为每个属性重复它,而且我敢打赌它也会影响性能,因为当我只需要一些时,我正在查询所有 Contrat ......
<tbody class="list">
{% for salarie in salaries %}
<tr>
<td>{% for contrat in salarie.contrats %}
{% if loop.first %}
{{ contrat.departement }}
{% endif %}
{% endfor %}
</td>
<td>{% for contrat in salarie.contrats %}
{% if loop.first %}
{{ contrat.service }}
{% endif %}
{% endfor %}
</td>
</tr>
<!-- AND SO ON ABOUT 12 TIMES ! -->
然后在 Twig 中我可以 {{ dump(salarie.lastContrat) }}返回预期的对象。
但是没有办法从那里获取属性。 {{ salarie.lastContrat.someProperty }}
不起作用。
必须查看{{ salarie.lastContrat }}
打印 Contrat __toString 方法返回内容的事实。
我不会公开更多尝试,所以请我的问题是:如何从上面呈现属性值getLastContrat()
以及实现这一目标的最干燥和最高效的方法是什么?
杨__羊羊
小怪兽爱吃肉