symfony 中的映射不一致

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

我有两个实体,

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”值,但我不确定。如果是,那么我不知道如何解决这个问题。 我在这个网站上发现了一些类似的案例,但没有一个与我的完全一样(或者我还没有找到它们)。

知道如何解决这个问题吗?

php symfony orm doctrine
1个回答
2
投票

我认为问题可能是您有两个属性(

sender
receiver
)并使用同一列来映射它们。如果您需要区分发送和接收,则需要在
sender
上具有
receiver
Notification
属性,然后在您的用户中具有
sentNotifications
receivedNotifications
。如果您确实需要在一次调用中将所有内容组合在一起,则可以将它们组合到用户中的未映射方法中,例如:

/**
 * @var Notification[]|ArrayCollection
 */
public function getAllNotifications()
{
    return new ArrayCollection(
        array_merge(
            $this->sentNotifications->toArray(),
            $this->receivedNotifications->toArray()
        )
    );
}
© www.soinside.com 2019 - 2024. All rights reserved.