2013-02-25 66 views
2

我需要設置關注者,關注(myFriends)hasFriend logic到我的項目。列「odobera」意思是「跟隨」示例nick(id用戶)odobera(跟隨該用戶)。用戶(25)跟隨用戶(37)。Symfony主義實體朋友有朋友關注者

請求表:

enter image description here

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(); 

回報:

enter image description here

什麼是好的:返回1條記錄。我實際上遵循只是一個人,你可以在這裏看到記錄的ID是24395

DB請求表:

enter image description here

我不知道,如果是很好的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)) %} 

返回假的,爲什麼呢?我跟着這個用戶,因爲我用轉儲檢查控制器:P幾行。

+0

是什麼'{{轉儲(app.user)}}'呈現? – cheesemacfly 2013-02-25 20:25:46

+0

This:http://pastebin.com/GVK60wdd – EnchanterIO 2013-02-25 20:33:01

+0

所以如果你用'for'循環,但用'{%for friend in friends%}',你可以看到你正在尋找的'follower.nick'? – cheesemacfly 2013-02-25 20:49:24

回答

0

問題似乎是你正在比較兩個不同類型的變量。

當你這樣做:{% if (app.user.hasFriend(follower.nick)) %}下面的函數調用:

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

這個函數被調用,採取$userUser類型的變量,然後使用功能上$this->myFriends
$this->myFriendsRequests(因此不同的類型User)的ArrayCollection並從學說文檔約:

兩個元素的比較嚴格,這意味着不僅是 值也是類型必須匹配。

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

+0

嗯.... thx很多嘗試幫助!你可以看到人們投票這個問題。我應該怎麼做才能告訴我?謝謝! – EnchanterIO 2013-02-26 16:29:01

+0

然後解決方案取決於你。你能以某種方式改變'$ nick'是'Request'嗎?你的網站有意義嗎?或者你可以編寫一個不同的'hasFriend()'函數來檢查例如id而不是整個對象嗎? – cheesemacfly 2013-02-26 16:31:31

+0

嗯...我想...是的..我沒有太多擅長它,但hasFriend功能點只是檢查用戶誰我想檢查...是在我的朋友...我不在乎更多:P這就是要點。 +能夠從$ user-> getMyFriends,並且不必在自己的ctrl中請求另一個實體。如果你能在這裏粘貼一些代碼,我會非常高興。你在這篇文章中的所有文件heh:P因爲3天后我不確定我能完成它:/ – EnchanterIO 2013-02-26 16:33:49