如何在symfony中实现一对多(多态)

vcudknz3  于 2023-11-22  发布在  其他
关注(0)|答案(1)|浏览(171)

嗨,我有三个实体UserAdminLog管理员和用户都有许多日志。每个日志有一个所有者可能是User可能是Admin
在本例中,我正在Symfony Doctrine中寻找与Laravel Elequent One To Many (Polymorphic)类似的系统来实现。
但是,我不想让每个AdminLogUserLog扩展Log或使用ManyToMany方法。
在Laravel中,我们在迁移中使用morphTomorph来声明一个多态实体。
我在AdminUser实体中尝试了logable_typelogable_id来模拟这种情况

我想在Symfony类似的机制,但如果有更好的解决方案或方式,或者它只是不是最佳做法,让我知道这是更好的

nzk0hqpo

nzk0hqpo1#

你可以做的是在你的UserAdmin类上实现一个接口。

接口

interface LoggerInterface
{

}

字符串

AdminUser类:

#[ORM\Entity()]
class User implements LoggerInterface

#[ORM\Entity()]
class Admin implements LoggerInterface


Log类中,您可以简单地与LoggerInterface类建立OneToMany关系。

#[ORM\ManyToOne(targetEntity: LoggerInterface::class, inversedBy: 'log')]
private LoggerInterface $target;


AdminUser类中:

#[ORM\OneToMany(mappedBy: 'target', targetEntity: Log::class)]
private Log $log;

相关问题