2

プロジェクトに (myFriends) hasFriend ロジックに従って、フォロワーを設定する必要があります。列「odobera」は、例 nick(id user) odobera (このユーザーをフォロー) を「フォローしている」ことを意味します。ユーザー (25) はユーザー (37) をフォローしています。

リクエスト表:

ここに画像の説明を入力

 User entity:  

    /**
 * @ORM\OneToMany(targetEntity="TB\RequestsBundle\Entity\Requests", mappedBy="odobera")
 */
protected $followers;    

/**
 * @ORM\OneToMany(targetEntity="TB\RequestsBundle\Entity\Requests", mappedBy="nick")
 */
protected $myFriends; 

public function __construct()
{
    parent::__construct();
     $this->followers = new \Doctrine\Common\Collections\ArrayCollection();
     $this->myFriends = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
 * Get myFriends
 *
 * @return \Doctrine\Common\Collections\Collection 
 */
public function getMyFriends()
{
    return $this->myFriends;
}

/**
 * 
 * @param \TB\UserBundle\Entity\User $user
 * @return bool
 */
public function hasFriend(User $user)
{
    return $this->myFriends->contains($user);
}  

 class Requests
 {

/**
 * @ORM\ManyToOne(targetEntity="TB\UserBundle\Entity\User", inversedBy="myFriends")
 * @ORM\JoinColumn(name="nick", referencedColumnName="id")
 */
protected $nick;    

/**
 * @ORM\ManyToOne(targetEntity="TB\UserBundle\Entity\User",inversedBy="followers")
 * @ORM\JoinColumn(name="odobera", referencedColumnName="id")
 */
protected $odobera;

コントローラーで:

       $myFollowers=$user->getMyFriends();

戻り値:

ここに画像の説明を入力

良い点: 1 レコードを返します。ここでわかるように、レコードのIDは24395です

DB リクエスト テーブル:

ここに画像の説明を入力

getMyFriends 関数がその「形式」で応答を返すことが良いかどうかはわかりません。よく見てください。

次に、クエリからフォロワーを選択し、ループします。

{% for follower in followers %}
    and i print data like this (works greate) {{ follower.nick }} 
            or if i want some fields from user entity {{ follower.nick.rank }} 
 {% endfor %}

しかし、問題はここにあります:

 {% if (app.user.hasFriend(follower.nick)) %} 

それはfalseを返します、なぜですか? dump :P Few lines overでコントローラーをチェックインしたので、このユーザーをフォローします。

4

1 に答える 1

0

問題は、2 つの異なる型変数を比較しているようです。

これを行う{% if (app.user.hasFriend(follower.nick)) %}と、次の関数が呼び出されます。

/**
 * 
 * @param \TB\UserBundle\Entity\User $user
 * @return bool
 */
public function hasFriend(User $user)
{
    return $this->myFriends->contains($user);
}

この関数は、User$user変数を使用して呼び出され、contains()関数 onを使用します$this->myFriends
$this->myFriendsは( とArrayCollectionRequests非常に異なるタイプUser) であり、 に関するドクトリン ドキュメントからのものですcontains()

2 つの要素の比較は厳密です。つまり、値だけでなく型も一致する必要があります。

http://www.doctrine-project.org/api/common/2.1/class-Doctrine.Common.Collections.ArrayCollection.html

于 2013-02-26T16:25:46.233 に答える