symfony2实体oneToMany和方法

时间:2013-03-17 10:40:32

标签: symfony entity many-to-one relationships

您好我已经完全成功地设置了我的实体onetoMany和ManyToOne我生成了setter和getter,并且在用户实体中它创建了这个方法:

用户实体:

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

请求实体:

/**
 * @ORM\ManyToOne(targetEntity="TB\UserBundle\Entity\User", inversedBy="followees")
 * @ORM\JoinColumn(name="followee_id", referencedColumnName="id", nullable=false)
 */ 
protected $followeeuser;

当我使用自己的自定义查询时效果很好......但我无法弄清楚如何使用symfony中生成的这个函数:

    public function addFollowee(\TB\UserBundle\Entity\User $followee)
{
    $this->followees[] = $followee;
}  

我不知道该通过那里...我试过首先根据用户的id从twig获取用户对象...工作正常但错误发生:

$user->addFollowee($userRepository->find($target_user_id));

Found entity of type TB\UserBundle\Entity\User on association TB\UserBundle\Entity\User#followees, but expecting TB\RequestsBundle\Entity\Requests

1 个答案:

答案 0 :(得分:3)

也许你应该在编码之前考虑一下你的目标。拿一支笔和一张纸。 :)

告诉我,如果我错了,但这就是我认为你要做的事情:

一个用户可以有很多“跟随者”。 一个“跟随者”可以有一个用户。

所以,OneToMany关系没问题。

以下是如何编写它,来自doc:

Requests.php(顺便说一句,你应该使用Request.php)

/**
 * @ORM\ManyToOne(targetEntity="User", inversedBy="requests")
 **/
private $user;

user.php的

/**
 * @ORM\OneToMany(targetEntity="Requests", mappedBy="user", cascade={"all"})
 **/
private $requests;

public function __construct()
{
    $this->requests = new \ArrayCollection();
}

现在您可以检查您的关系是否正常,并更新您的架构:

php app/console doctrine:schema:validate
php app/console doctrine:schema:update --force

关于getter / setters:

Requests.php

public function getUser()
{
    return $this->user;
}

public function setUser(User $user) // Please add a Use statement on top of your document
{
    $this->user = $user;
    return $this;
}

user.php的

public function addRequest(Requests $request)
{
    $this->requests->add($request);
    return $this;
}

public function removeRequest(Requests $request)
{
    $this->requests->removeElement($request);
    return $this;
}

// Get requests and set requests (you know how to write those ones)

现在,要将用户设置为请求,请使用

$request->setUser($user);

要向用户添加请求,请使用

$user->addRequest($request);