我正在尝试映射一对多的关系,但我有很多问题。 我有以下实体关系模型:
所以,我在Usuario主义模型中写下一个注释:
class Usuario implements UserInterface{
// Some code...
/**
* @ORM\OneToMany(targetEntity="UsuarioComunicacion", mappedBy="usuario")
*/
protected $contacto;
// More code...
}
在UsuarioComunicacion模型(N-N表)中:
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说:
“注意:未定义的索引:usuario in /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;
}
答案 0 :(得分:1)
inversedBy
课程中的UsuarioComunicacion
应为inversedBy="contacto"
,因为这是变量名称。
答案 1 :(得分:0)
这里有多对多的情况。附加表无法隐藏。这种情况需要一些额外的工作,这不像添加一些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;
答案 2 :(得分:0)
我找到了解决方案。由于某种原因@ORM\Column(...)
注释(在UsuarioComunicacion中),关系不起作用。
因此,我删除注释并重命名实例变量:
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...
}
谢谢你的时间!