Php Symfony2如何使用querybuilder连接多对多关系?

Php Symfony2如何使用querybuilder连接多对多关系?,php,symfony,doctrine,Php,Symfony,Doctrine,作为symfony2和querybuilder的新手,我尝试选择所有容器,但将结果限制为登录用户有权访问的容器 使用当前代码,我得到以下错误: 注意:未定义索引:容器位于/var/www/biztv_symfony/vendor/doctrine/lib/doctrine/ORM/Query/SqlWalker.php第746行 下面是我对这个问题的尝试(我从这个论坛和其他论坛网站上尝试了几个选项,但似乎仍然无法正确理解…) 我通过多对多关系跟踪访问,这是我的用户实体 <?php // s

作为symfony2和querybuilder的新手,我尝试选择所有容器,但将结果限制为登录用户有权访问的容器

使用当前代码,我得到以下错误:

注意:未定义索引:容器位于/var/www/biztv_symfony/vendor/doctrine/lib/doctrine/ORM/Query/SqlWalker.php第746行

下面是我对这个问题的尝试(我从这个论坛和其他论坛网站上尝试了几个选项,但似乎仍然无法正确理解…)

我通过多对多关系跟踪访问,这是我的用户实体

<?php
// src/BizTV/UserBundle/Entity/User.php

namespace BizTV\UserBundle\Entity;

use FOS\UserBundle\Entity\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;

use BizTV\BackendBundle\Entity\company as company;

/**
 * @ORM\Entity
 * @ORM\Table(name="fos_user")
 */
class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;  

    /**
    * @var object BizTV\BackendBundle\Entity\company
    *  
    * @ORM\ManyToOne(targetEntity="BizTV\BackendBundle\Entity\company")
    * @ORM\JoinColumn(name="company", referencedColumnName="id", nullable=false)
    */
    protected $company; 

    /**
     * @ORM\ManyToMany(targetEntity="BizTV\ContainerManagementBundle\Entity\Container", inversedBy="User")
     * @ORM\JoinTable(name="access")
     */
    private $access;

    public function __construct()
    {
        parent::__construct();

        $this->access = new \Doctrine\Common\Collections\ArrayCollection();

    }
//getters and setters...

容器
实体中,当您指定
$users
属性映射时,
mappedBy
的值很重要:您需要在
用户
类中指定反向属性的名称

在这里,我们有,
容器::$users
用户::$access

将注释更改为:

class User
{
    /**
     * @ORM\ManyToMany(targetEntity="BizTV\ContainerManagementBundle\Entity\Container", inversedBy="users")
     * @ORM\JoinTable(name="access")
     */
    private $access;
}

class Container
{
    /**
     * @ORM\ManyToMany(targetEntity="BizTV\UserBundle\Entity\User", mappedBy="access")
     */
    private $users;
}

我鼓励您阅读,并在所有关联中验证和修复此问题。

容器
实体中,当您指定
$users
属性映射时,
mappedBy
的值很重要:您需要在
用户
类中指定反向属性的名称

在这里,我们有,
容器::$users
用户::$access

将注释更改为:

class User
{
    /**
     * @ORM\ManyToMany(targetEntity="BizTV\ContainerManagementBundle\Entity\Container", inversedBy="users")
     * @ORM\JoinTable(name="access")
     */
    private $access;
}

class Container
{
    /**
     * @ORM\ManyToMany(targetEntity="BizTV\UserBundle\Entity\User", mappedBy="access")
     */
    private $users;
}

我鼓励您阅读,并在所有关联中验证和修复此问题。

哦,我没有充分阅读文档,我认为inversedBy和MappedBy是表名,而不是字段名……哦,我没有充分阅读文档,我认为inversedBy和MappedBy是表名,而不是字段名。。。
class User
{
    /**
     * @ORM\ManyToMany(targetEntity="BizTV\ContainerManagementBundle\Entity\Container", inversedBy="users")
     * @ORM\JoinTable(name="access")
     */
    private $access;
}

class Container
{
    /**
     * @ORM\ManyToMany(targetEntity="BizTV\UserBundle\Entity\User", mappedBy="access")
     */
    private $users;
}