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

数据库请求表:

在此处输入图像描述

我不知道 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,为什么?当我用转储检查控制器时,我跟随这个用户:P 几行结束。

4

1 回答 1

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

这个函数被调用,接受一个User类型$user变量,然后你contains()$this->myFriends.
$this->myFriends是一个(ArrayCollectionRequests不同的类型User)并且来自关于 的学说文档contains()

两个元素的比较是严格的,这意味着不仅值必须匹配,类型也必须匹配。

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

于 2013-02-26T16:25:46.233 回答