Php 理解多对多关系
我试图建立一对多的关系,但我有很多问题。 我有以下实体关系模型: 因此,我将在Usuario学说模型中编写下一个注释: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
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等待回复,但不起作用:(