嗨,我有三个实体
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 中有类似的机制,但是如果有更好的解决方案或 方式或者这不是最好的做法让我知道哪个更好
您可以做的是在您的 User 和 Admin 类上实现一个接口。
界面:
interface LoggerInterface
{
}
Admin 和 User 类:
#[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;
在您的Admin和User课程中:
#[ORM\OneToMany(mappedBy: 'target', targetEntity: Log::class)]
private Log $log;