Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Doctrine orm 两个多个自引用集合_Doctrine Orm_Symfony - Fatal编程技术网

Doctrine orm 两个多个自引用集合

Doctrine orm 两个多个自引用集合,doctrine-orm,symfony,Doctrine Orm,Symfony,我使用FOSUserBundle,在我的用户类中,我需要两件事: 用户可以邀请其他用户建立友谊。这位朋友必须证实这种友谊。因此,用户有两个属性$inviteforriends和$invitedFriends,这是一个多个自引用关联,用于管理待定的友谊 如果友谊被确认,它将从PendingFriends关联中删除并添加到友谊关联中:$myFriends和$Friendsithme,这也是一个多个自引用关联 现在,我在控制器中执行以下操作: public function addAction() {

我使用FOSUserBundle,在我的用户类中,我需要两件事:

  • 用户可以邀请其他用户建立友谊。这位朋友必须证实这种友谊。因此,用户有两个属性
    $inviteforriends
    $invitedFriends
    ,这是一个多个自引用关联,用于管理待定的友谊

  • 如果友谊被确认,它将从PendingFriends关联中删除并添加到友谊关联中:
    $myFriends
    $Friendsithme
    ,这也是一个多个自引用关联

  • 现在,我在控制器中执行以下操作:

    public function addAction() {
        $email = trim($this->get('request')->request->get("email"));
        // ...
    
        // find requested friend
        $userManager = $this->get('fos_user.user_manager');
        $friend = $userManager->findUserByEmail($email);
        // ...
        $user = $this->container->get('security.context')->getToken()->getUser();
    
        // ...
    
        // friend has not already asked the user
        if ($user->getInviteeForFriends()->contains($friend)) {
                throw new Exception(self::FRIEND_HAS_ALREADY_ASKED_MSG, self::FRIEND_HAS_ALREADY_ASKED);
        }
    }
    
    $user->getinviteforfriends()->包含($friend)
    最终导致此错误:

    注意:未定义索引:$invitedFriends in/home/r/workspace/MyProject/vendor/doctrine/lib/doctrine/ORM/Persisters/basicintypersister.php第764行

    一个
    echo get\u类($user->getinviteforriends())
    echo一个
    Doctrine\ORM\PersistentCollection
    。 A
    echo$user->getinviteforfriends()->count()会导致相同的未定义索引错误

    这些声明有效:

    $user->getMyFriends()->contains($friend)
    $user->getInvitedFriends()->contains($friend)
    
    但是
    $user->getinviteforfriends()->包含($friend)
    没有。为什么?我做错了什么

    这是用户类的一部分:

    /**
     * @ORM\Entity
     * @ORM\Table(name="fos_user")
     */
    class User extends BaseUser
    {
    /**
     * @ORM\ManyToMany(targetEntity="User", mappedBy="myFriends")
     */
    protected $friendsWithMe;
    
    /**
     * @ORM\ManyToMany(targetEntity="User", inversedBy="friendsWithMe")
     * @ORM\JoinTable(name="friends",
     *     joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
     *     inverseJoinColumns={@ORM\JoinColumn(name="friend_user_id", referencedColumnName="id")}
     * )
     */
    protected $myFriends;
    
    
    /**
     * I am invited for a friendship from these friends.
     * 
     * @ORM\ManyToMany(targetEntity="User", mappedBy="$invitedFriends")
     */
    protected $inviteeForFriends;
    
    /**
     * I invited those friends for a friendship.
     * 
     * @ORM\ManyToMany(targetEntity="User", inversedBy="$inviteeForFriends")
     * @ORM\JoinTable(name="pending_friendships",
     *     joinColumns={@ORM\JoinColumn(name="inviter_user_id", referencedColumnName="id")},
     *     inverseJoinColumns={@ORM\JoinColumn(name="invitee_user_id", referencedColumnName="id")}
     * )
     */
    protected $invitedFriends;
    
    public function __construct()
    {
        parent::__construct();
        $this->friendsWithMe = new \Doctrine\Common\Collections\ArrayCollection();
        $this->myFriends = new \Doctrine\Common\Collections\ArrayCollection();
        $this->inviteeForFriends = new \Doctrine\Common\Collections\ArrayCollection();
        $this->invitedFriends = new \Doctrine\Common\Collections\ArrayCollection();
    }
    
    
    /**
     * Add friendsWithMe
     *
     * @param MyProject\SiteBundle\Entity\User $friendsWithMe
     */
    public function addFriendsWithMe(\MyProject\SiteBundle\Entity\User $friendsWithMe)
    {
        $this->friendsWithMe[] = $friendsWithMe;
    }
    
    /**
     * Get friendsWithMe
     *
     * @return Doctrine\Common\Collections\Collection $friendsWithMe
     */
    public function getFriendsWithMe()
    {
        return $this->friendsWithMe;
    }
    
    /**
     * Add myFriends
     *
     * @param MyProject\SiteBundle\Entity\User $myFriends
     */
    public function addMyFriends(\MyProject\SiteBundle\Entity\User $myFriends)
    {
        $this->myFriends[] = $myFriends;
    }
    
    /**
     * Get myFriends
     *
     * @return Doctrine\Common\Collections\Collection $myFriends
     */
    public function getMyFriends()
    {
        return $this->myFriends;
    }
    
    /**
     * Add inviteeForFriend
     *
     * @param MyProject\SiteBundle\Entity\User $inviteeForFriend
     */
    public function addInviteeForFriends(\MyProject\SiteBundle\Entity\User $inviteeForFriend)
    {
        $this->inviteeForFriends[] = $inviteeForFriend;
    }
    
    /**
     * Get inviteeForFriends
     *
     * @return Doctrine\Common\Collections\Collection $inviteeForFriends
     */
    public function getInviteeForFriends()
    {
        return $this->inviteeForFriends;
    }
    
    /**
     * Add invitedFriend
     *
     * @param MyProject\SiteBundle\Entity\User $invitedFriend
     */
    public function addInvitedFriends(\MyProject\SiteBundle\Entity\User $invitedFriend)
    {
        $this->invitedFriends[] = $invitedFriend;
    }
    
    /**
     * Get invitedFriends
     *
     * @return Doctrine\Common\Collections\Collection $invitedFriends
     */
    public function getInvitedFriends()
    {
        return $this->invitedFriends;
    }
    }
    

    在注释中,
    $inviteeForFriends
    应该只是
    inviteeForFriends
    。那里没有美元符号。它永远不会出现在注释中

    另请参见任何示例:


    在注释中,
    $inviteeForFriends
    应该只是
    inviteeForFriends
    。那里没有美元符号。
    /** @Entity */
    class Feature
    {
        // ...
        /**
         * @ManyToOne(targetEntity="Product", inversedBy="features")
         * @JoinColumn(name="product_id", referencedColumnName="id")
         */
        private $product;
        // ...
    }