我有两个实体,
User
和Notification
。在每个通知中,都有一个 sender
和 receiver
,它们都是 User
实体。但教义不喜欢它。模式验证说:
The mappings ACME\CoreBundle\Entity\Notifications#sender and ACME\CoreBundle\Entity\User#notifications are inconsistent with each other.
以下是两个实体的映射:
/**
* Notifications
*
* @ORM\Table(name="notifications")
*
*/
class Notifications
{
/**
* @ORM\ManyToOne(targetEntity="WD\UserBundle\Entity\User", inversedBy="notifications")
*/
protected $sender;
/**
* @ORM\ManyToOne(targetEntity="WD\UserBundle\Entity\User", inversedBy="notifications")
*/
protected $receiver;
}
用户一:
/**
* User
*
* @ORM\Table(name="My_user")
*
*/
class User extends BaseUser
{
/**
* @var ArrayCollection
*
* @ORM\OneToMany(targetEntity="WD\CoreBundle\Entity\Notifications", mappedBy="receiver")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
protected $notifications;
}
出于可读性原因,我没有放置整个实体代码,但我相信这些应该是足够的信息。 我相信错误来自于我无法在
User
实体中放置两个“mappedBy”值,但我不确定。如果是,那么我不知道如何解决这个问题。
我在这个网站上发现了一些类似的案例,但没有一个与我的完全一样(或者我还没有找到它们)。
知道如何解决这个问题吗?
我认为问题可能是您有两个属性(
sender
,receiver
)并使用同一列来映射它们。如果您需要区分发送和接收,则需要在 sender
上具有 receiver
和 Notification
属性,然后在您的用户中具有 sentNotifications
和 receivedNotifications
。如果您确实需要在一次调用中将所有内容组合在一起,则可以将它们组合到用户中的未映射方法中,例如:
/**
* @var Notification[]|ArrayCollection
*/
public function getAllNotifications()
{
return new ArrayCollection(
array_merge(
$this->sentNotifications->toArray(),
$this->receivedNotifications->toArray()
)
);
}