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

问题描述 投票:0回答:1

嗨,我有三个实体

User
Admin
Log
管理员和用户都有很多日志。 每根日志都有一个所有者可能是
User
可能是
Admin

在这种情况下,我正在寻找与

Laravel Elequent One To Many (Polymorphic)
中的
Symfony Doctrine
类似的系统来实现。

但是,我不想让每个

AdminLog
UserLog
延伸
Log
或者使用
ManyToMany
方法。

在 Laravel 中,我们在迁移中使用

morphTo
morph
来声明实体多态。

我尝试在

logable_type
logable_id
实体中使用
Admin
User
来模拟

我想要 Symfony 中有类似的机制,但是如果有更好的解决方案或 方式或者这不是最好的做法让我知道哪个更好

php symfony doctrine-orm doctrine polymorphism
1个回答
0
投票

您可以做的是在您的 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;
© www.soinside.com 2019 - 2024. All rights reserved.