[英]Understanding many to many relationships
我正在尝试映射一对多关系,但是我有很多问题。 我有以下实体关系模型:
因此,我在Usuario理论模型中编写下一个注释:
class Usuario implements UserInterface{
// Some code...
/**
* @ORM\OneToMany(targetEntity="UsuarioComunicacion", mappedBy="usuario")
*/
protected $contacto;
// More code...
}
在UsuarioCommunicacion模型(NN表)中:
class UsuarioComunicacion{
/**
* @ORM\Id
* @ORM\Column(name="idusuario", type="integer", length=11)
* @ORM\ManyToOne(targetEntity="Usuario", inversedBy="contacto")
* @ORM\JoinColumn(name="idusuario", referencedColumnName="idusuario")
*/
protected $usuario;
// More code...
}
但是,当我尝试使用这种关系(进入控制器代码)时,Symfony说:
“通知:未定义的索引:/var/www/AppsManantiales/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php第1575行中的用法”
我没有太多的映射经验,而且我不知道发生了什么。 有任何想法吗 ? 谢谢 !
更新1
当我尝试通过以下方式获取用户的联系信息时,出现问题:
$user->getContacto();
getContacto()是一个自动生成的getter:
/**
* Get contacto
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getContacto()
{
return $this->contacto;
}
该inversedBy
在UsuarioComunicacion
类应该是inversedBy="contacto"
,因为这是变量名。
您在这里有很多对很多情况。 附加表无法将其隐藏。 这种情况下需要做一些额外的工作,而这些工作并不像添加一些ORM语句那么容易。
在下文中,我仅添加了主键属性,因为其余属性应该非常容易获得。
根据您提供的信息,这是最有用的方法。 让我知道它是否有效。
Usuario:
/**
* @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'
));
}
Tipocommunicacion:
/**
* @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'
));
}
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;
我找到了解决方案。 由于某种原因(在UsuarioComunicacion中)使用@ORM\\Column(...)
批注,该关系不起作用。 因此,我删除了注释并重命名了实例变量:
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...
}
谢谢你的时间 !
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.