我们正在逐步将一个非常旧的应用程序重写到新的Symfony框架中,同时仍然并行运行旧的应用程序,直到更多的应用程序被重写。
我正在尝试在Symfony中重建旧数据库,到目前为止,大多数实体都正常。
然而,我面临着一个特殊关系的问题。
我有一个名为DIET的实体和另一个名为ModelGallery的实体。
关系看起来像这样:
ModelGallery.item_id = diet.id AND ModelGallery.model = 'DIET'
字符串
我正在试图找出如何在实体级别解决这个问题-在两列上执行连接。如何在Symfony中实现这一点?任何帮助或指导都是非常感谢的。
我必须调整symfony代码到现有的数据库。
我在仓库中创建自定义函数
public function getDietWithModelGalleries(int $id)
{
$qb = $this->createQueryBuilder('d');
$query = $qb->select('d', 'mg')
->leftJoin('App\Entity\ModelGallery', 'mg', Join::WITH, 'd.id = mg.itemId AND mg.model = :model')
->setParameter('model', 'DIET')
->where('d.id = :id')
->setParameter('id', $id)
->getQuery();
return $query->getResult();
}
型
但我想把它放在实体级
1条答案
按热度按时间dm7nw8vv1#
要在Symfony中的实体级别定义这种关系,可以使用自定义的存储库方法和原则扩展。
首先,定义从ModelGallery到Diet的多对一关系:
字符串
这将在item_id和model上创建连接条件。
接下来,为ModelGallery创建一个仓库类,并添加一个自定义方法来检索饮食库:
型
然后,在您的控制器或服务中,您可以执行以下操作:
型
这将在后台处理连接。确保还将diet属性添加到ModelGallery中以进行双向关联。