0

嗨,我已经完全成功地设置了我的实体 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 从树枝获取用户对象...效果很好,但发生了错误:

$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
4

1 回答 1

3

也许你应该在编码之前考虑一下你想要做什么。拿起一支笔和一张纸。:)

如果我错了,请告诉我,但这是我认为您正在尝试做的事情:

一个用户可以有多个“关注者”。一个“关注者”可以有一个用户。

因此,OneToMany 关系是可以的。

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

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

/**
 * @ORM\ManyToOne(targetEntity="User", inversedBy="requests")
 **/
private $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/setter :

请求.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;
}

用户.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);
于 2013-03-17T14:14:52.283 回答