php Symfony 6.3中特定实体关系的问题

js81xvg6  于 2023-08-02  发布在  PHP
关注(0)|答案(1)|浏览(124)

我们正在逐步将一个非常旧的应用程序重写到新的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();
   }


但我想把它放在实体级

dm7nw8vv

dm7nw8vv1#

要在Symfony中的实体级别定义这种关系,可以使用自定义的存储库方法和原则扩展。
首先,定义从ModelGallery到Diet的多对一关系:

// ModelGallery entity

/** 
 * @ORM\ManyToOne(targetEntity="Diet")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="item_id", referencedColumnName="id"),
 *   @ORM\JoinColumn(name="model", referencedColumnName="model") 
 * })
*/
private $diet;

字符串
这将在item_id和model上创建连接条件。
接下来,为ModelGallery创建一个仓库类,并添加一个自定义方法来检索饮食库:

// ModelGalleryRepository

public function findByDiet(Diet $diet) 
{
  return $this->createQueryBuilder('mg')
    ->andWhere('mg.diet = :diet')
    ->setParameter('diet', $diet)
    ->getQuery()
    ->getResult();
}


然后,在您的控制器或服务中,您可以执行以下操作:

$galleries = $galleryRepository->findByDiet($diet);


这将在后台处理连接。确保还将diet属性添加到ModelGallery中以进行双向关联。

相关问题