【问题标题】:Symfony3 doctrine Many-to-Many column not found on select选择时找不到 Symfony3 原则多对多列
【发布时间】: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


【解决方案1】:

嗯,你好像忘了在这里运行doctrine:schema:update命令。

另外,请尝试修复此注释:

/**
* @ORM\ManyToMany(targetEntity="User", inversedBy="team", cascade={"persist"})
* @ORM\JoinTable(name="user_team")
*/

类似

/**
 * @ManyToMany(targetEntity="User")
 * @JoinTable(name="User_Team",
 *      joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
 *      inverseJoinColumns={@JoinColumn(name="team_id", referencedColumnName="id")}
 * )
 */

【讨论】:

    【解决方案2】:

    如果您想获取团队的用户, 在 Team 对象上使用您的 getUser 函数:

    $em    = $this->getDoctrine()->getManager();
    $team  = $em->getRepository('AppBundle:Team')->find( $aTeamId );
    
    $users = $team->getUser();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-22
      • 1970-01-01
      • 2015-04-05
      • 2022-06-14
      • 1970-01-01
      相关资源
      最近更新 更多