您好我正在尝试创建此类映射
class Users
{
/**
* @var integer
*
* @ORM\Column(name="id_users", type="smallint", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=100, nullable=true)
*/
private $name;
/**
*
* @var ArrayCollection
* @ORM\OneToMany(targetEntity="UsersEmailAddresses", mappedBy="users")
* @ORM\JoinColumn(name="id_users", referencedColumnName="users_id")
*/
private $email;
和
class UsersEmailAddresses
{
/**
* @var integer
*
* @ORM\Column(name="id_users_email_adresses", type="smallint", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="email", type="string", length=100, nullable=true)
*/
private $email;
/**
* @var \Users
* @ORM\Column(name="users_id")
* @ORM\OneToMany(targetEntity="Users")
*/
private $users;
当我尝试用一个用户显示许多电子邮件时,如
<td>{{ entity.name }}</td>
<td><ul>
{% for e in entity.email %}
<li>{{ e.email }}</li>
{% endfor %}
</ul></td>
我得到的错误如An exception has been thrown during the rendering of a template ("Notice: Undefined index: users in /var/www/symfony/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php line 1575") in /var/www/symfony/src/Test/UserBundle/Resources/views/Users/index.html.twig at line 22
22行是for
循环
答案 0 :(得分:1)
referencedColumname对相关实体的ID字段的引用。
name是保存要创建的外键的额外列的名称 -
referencedColumnName是相关实体的外键。
你在拥有和 OneToMany的方面定义了ManyToOne ......
不要在双方使用OneToMany !!
joinColumn定义必须在您自己的方面(也就是使用inversedBy的那个)。
IF 你有多对一的用户关系...到一个地址... 你不 .. JoinColum将在您的用户实体上(也就是拥有双向关联的一方)
* @ORM\JoinColumn(name="id_users", referencedColumnName="users_id")
*/
..应该......
* @ORM\JoinColumn(name="id_users", referencedColumnName="id_users_email_adresses")
*/
但......在您的情况下......
一个用户应该有很多地址...地址将是你的双向一对多关系的拥有方。
用户强>
oneToMany,mappedBy
<强>地址强>
ManyToOne,inversedBy(+ JoinColumn)
提示强>
你可以完全省略@JoinColumn,因为它会自动生成......
实体名称通常应该是单数......
为什么数据库中存在这些复杂的id列...是否足以让表用户具有列ID?