如何解决两个many2many自引用集合
| 我使用FOSUserBundle,在我的User类中,我想要两件事: 一个用户可以邀请另一个用户建立友谊。朋友必须确认那种友谊。因此,用户具有两个属性$inviteeForFriends
和$invitedFriends
,这是许多用于管理待处理的友谊的自引用关联
如果确认了友谊,则将其从挂起的友谊联盟中删除,并添加到友谊联盟中:$myFriends
和$friendsWithMe
,这也是很多许多自引用联盟。
现在在控制器中,我这样做:
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->getInviteeForFriends()->contains($friend)
导致此错误:
Notice: Undefined index: $invitedFriends in /home/r/workspace/MyProject/vendor/doctrine/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php line 764
echo get_class($user->getInviteeForFriends())
回显a8ѭ。
“ 9”会导致相同的未定义索引错误。
这些语句起作用:
$user->getMyFriends()->contains($friend)
$user->getInvitedFriends()->contains($friend)
the5ѭ则不然。为什么?我究竟做错了什么?
这是User类的一部分:
/**
* @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\",* 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;
}
}
解决方法
在注释中,“ 0”应仅为“ 14”。那里没有美元符号。它永远不会出现在注释中。
另请参阅教义orm 2.0文档中的任何示例:
/** @Entity */
class Feature
{
// ...
/**
* @ManyToOne(targetEntity=\"Product\",inversedBy=\"features\")
* @JoinColumn(name=\"product_id\",referencedColumnName=\"id\")
*/
private $product;
// ...
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。