【发布时间】:2017-10-11 23:01:21
【问题描述】:
我是 Symfony 和 Doctrine 的初学者,我对多对多关系有疑问。 我有接下来的两个实体,与多对多相关。
AppBundle/Entity/User.php
/**
* @ORM\ManyToMany(targetEntity="Team", mappedBy="user", cascade={"all"})
*
*/
private $team;
public function __construct()
{
parent::__construct();
$this->team = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Add team
*
* @param \AppBundle\Entity\Team $team
*
* @return User
*/
public function addTeam(\AppBundle\Entity\Team $team)
{
$this->team[] = $team;
return $this;
}
/**
* Remove team
*
* @param \AppBundle\Entity\Team $team
*/
public function removeTeam(\AppBundle\Entity\Team $team)
{
$this->team->removeElement($team);
}
/**
* Get team
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getTeam()
{
return $this->team;
}
AppBundle/Entity/Team.php
/**
* @ORM\ManyToMany(targetEntity="User", inversedBy="team", cascade={"persist"})
* @ORM\JoinTable(name="user_team")
*/
private $user;
public function __construct()
{
$this->user = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Add user
*
* @param \AppBundle\Entity\User $user
*
* @return Team
*/
public function addUser(\AppBundle\Entity\User $user)
{
$this->user[] = $user;
return $this;
}
/**
* Remove user
*
* @param \AppBundle\Entity\User $user
*/
public function removeUser(\AppBundle\Entity\User $user)
{
$this->user->removeElement($user);
}
/**
* Get user
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getUser()
{
return $this->user;
}
在我的控制器中,我有以下代码:
AppBundle/Controller/DefaultController.php
$em = $this->getDoctrine()->getManager();
$em->getRepository('AppBundle:Team')->findBy(array('user'=>$usr));
我有下一个错误:
执行 'SELECT t0.id AS id_1, t0.name 时发生异常 AS name_2, t0.description AS description_3, t0.active AS active_4, t0.date_add AS date_add_5, t0.date_modified AS date_modified_6 FROM 团队 t0 WHERE user_team.user_id = ?'带参数 [2]:
SQLSTATE[42S22]:未找到列:1054 未知列 'where 子句'中的'user_team.user_id' 500 内部服务器错误 - 无效字段名异常
我做错了什么?
关系? 控制器? 也许一切?
谢谢你:)
【问题讨论】:
-
不知何故,Doctrine 丢失了整个
JOIN- 尝试清除您的缓存 (php bin/console cache:clear) 并查看教义是否想以某种方式更新您的架构:php bin/console doctrine:schema:update --dump-sql。 -
user_team 表是什么样子的?
-
谢谢你们 :)
-
我尝试清除缓存并更新架构,但问题仍然存在。 @kormik user_teams 表似乎没问题:team_id -> int (11) -> 外键:引用表:团队;引用字段:id user_id -> int (11) -> 外键:引用表:fos_user;引用字段:id 谢谢
-
我认为 symfony 可能对你的条款感到困惑。尝试将 ArrayCollection 变量更改为具有复数名称,例如
$users而不是$user,以及$teams而不是$team。更改相关功能以匹配。接下来,向我们阐明您要实现的目标。您是在寻找团队中的用户列表,还是给定用户的团队列表?无论哪种方式,您都可以使用实体中的函数来实现这些。无需使用findBy来获取这些。
标签: php symfony doctrine-orm doctrine symfony-3.2