學說生成中間表Many to Many
關係。你不能添加任何字段到該表。我的意思是accepted
。你也有三個表:
在你的getusersre
函數中,你想嘗試找朋友。據我所知,根據您的要求,不可能爲您的標準添加accepted
字段。
另外我改變了你的結構。你怎麼看待這件事?
class User
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="username", type="string", length=255, unique=true)
*/
private $username;
/**
* @ORM\OneToMany(targetEntity="Friend", mappedBy="userId")
*/
private $friends;
//Other fields, getters and setters.
}
class Friend
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="friends")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
protected $userId;
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="friends")
* @ORM\JoinColumn(name="friend_id", referencedColumnName="id")
*/
protected $friendId;
/**
* @ORM\Column(name="accepted", type="boolean")
*/
protected $accepted;
//Other fields, getters and setters
}
Friend
實體的名稱不穩定。您可以使用FriendRelationship
。
另外,功能getAcceptedFriends
會這樣。
public function getAcceptedFriends()
{
$cr = Criteria::create();
$cr->andWhere($cr->expr()->eq('accepted', 1));
return $this->friends->matching($cr);
}
或者
public function getAcceptedFriends()
{
$friends = [];
/** @var Friend $friend */
foreach ($this->friends as $friend) {
if ($friend->getAccepted()) $friends[] = $friend;
}
return $friends;
}
您可以使用這樣的。
foreach($user->getAcceptedFriends() in $friendRelationship){
// $friendRelationship is a instance of Friend.
$username = $friendRelationship->getFriendId()->getUsername();
}
在樹枝
{% for fr in user.acceptedFriends %}
{{ fr.friendId.username }}
{% else %}
{{ 'No friend' }}
{% endfor %}
您可以加入'Users'實體代碼? –
這是http://jpst.it/DkP7 –
你的「接受」字段在哪裏? –