Php 理解多对多关系

Php 理解多对多关系,php,symfony,doctrine-orm,many-to-many,Php,Symfony,Doctrine Orm,Many To Many,我试图建立一对多的关系,但我有很多问题。 我有以下实体关系模型: 因此,我将在Usuario学说模型中编写下一个注释: class Usuario implements UserInterface{ // Some code... /** * @ORM\OneToMany(targetEntity="UsuarioComunicacion", mappedBy="usuario") */ protected $contacto; // Mo

我试图建立一对多的关系,但我有很多问题。 我有以下实体关系模型:

因此,我将在Usuario学说模型中编写下一个注释:

class Usuario implements UserInterface{
     // Some code...
    /**
     * @ORM\OneToMany(targetEntity="UsuarioComunicacion", mappedBy="usuario")
     */
   protected $contacto;

    // More code...
}
在UsuarioComunication模型(N-N表)中:

但是,当我尝试使用这种关系时(在控制器代码中),Symfony说:

注意:未定义索引:usuario中的 /var/www/AppsManantiales/vendor/doctrine/orm/lib/doctrine/orm/persister/basicnitypersister.php 第1575行“

我没有太多的绘图经验…我也不知道发生了什么。 有什么想法吗? 谢谢

更新1

当我尝试通过以下方式获取用户的联系人值时,会出现问题:

$user->getContacto();
getContacto()是一个自动生成的getter:

/**
 * Get contacto
 *
 * @return \Doctrine\Common\Collections\Collection 
 */
public function getContacto()
{
    return $this->contacto;
}

您的
UsarioComunication
类中的
inversedBy
应该是
inversedBy=“contacto”
,因为这是变量名称。

这里有一个多对多的情况。附加表无法隐藏该信息。这个案例需要一些额外的工作,而不是像添加几个ORM语句那样简单

在下文中,我只添加了主键属性,因为其他属性应该很容易获得

根据您提供的信息,这是最有用的方法。让我知道它是否有效

乌萨里奥:

/**
 * @ORM\Column(name="idusuario", type="integer")
 * @ORM\Id
 */
private $idusuario;

public function setUp()
{
    parent::setUp();
    // some code
    $this->hasMany('Tipocommunicacion as Tipocommunicacions', array(
        'local' => 'idusuario',
        'foreign' => 'idtipocommunicacion',
        'refClass' => 'UsuarioTipcommunicacion'
    ));

}
信息交流:

/**
 * @ORM\Column(name="idtipocommunicacion", type="integer")
 * @ORM\Id
 */
private $idtipocommunicacion;

public function setUp()
{
    parent::setUp();
    // some code
    $this->hasMany('Usuario as Usuarios', array(
        'local' => 'idtipocommunicacion',
        'foreign' => 'idusuario',
        'refClass' => 'UsuarioTipocommunicacion'
    ));
}
/**
 * @ORM\Column(name="idusuario", type="integer")
 * @ORM\Id
 */
private $idusuario;

/**
 * @ORM\Column(name="idtipocommunicacion", type="integer")
 * @ORM\Id
 */
private $idtipocommunicacion;

/**
 * @ORM\Column(name="valor", type="string")
 */
private $valor;
常用通信:

/**
 * @ORM\Column(name="idtipocommunicacion", type="integer")
 * @ORM\Id
 */
private $idtipocommunicacion;

public function setUp()
{
    parent::setUp();
    // some code
    $this->hasMany('Usuario as Usuarios', array(
        'local' => 'idtipocommunicacion',
        'foreign' => 'idusuario',
        'refClass' => 'UsuarioTipocommunicacion'
    ));
}
/**
 * @ORM\Column(name="idusuario", type="integer")
 * @ORM\Id
 */
private $idusuario;

/**
 * @ORM\Column(name="idtipocommunicacion", type="integer")
 * @ORM\Id
 */
private $idtipocommunicacion;

/**
 * @ORM\Column(name="valor", type="string")
 */
private $valor;

我找到了解决办法。由于某种原因,
@ORM\Column(…)
注释(在UsuarioComunication中)的关系不起作用。 因此,我删除注释并重命名实例变量:

class UsuarioComunicacion{
    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Usuario", inversedBy="contacto")
     * @ORM\JoinColumn(name="idusuario", referencedColumnName="idusuario")
     */
    protected $idusuario;

    // More code...
}

class Usuario implements UserInterface{
     // Some code...
    /**
     * @ORM\OneToMany(targetEntity="UsuarioComunicacion", mappedBy="idusuario")
     */
   protected $contacto;

    // More code...
}

谢谢你的时间

尝试将mappedBy=“usuario”更改为mappedBy=“usuario”,它应该work@Satya等待回复,但不起作用:(