3

こんにちは私はそのようなマッピングを作成しようとしています

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;

そして、次のような1人のユーザーで多くのメールを表示しようとしているとき

<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ループ

4

1 に答える 1

1

ここにマッピング エラーがあります。ドキュメンテーション:ここここここ

  • referencedColumname は、関連エンティティの ID フィールドへの参照です。

  • name は、作成する外部キーを保持する追加の列の名前です。

  • referencedColumnName は、関連エンティティの外部キーです。

  • 所有側で ManyToOne を定義し、逆側でOneToMany を定義します...

  • 両側でOneToManyを使用しないでください!!

  • joinColumn の定義は、所有側 (別名 inversedBy を使用する側) にある必要があります。


ユーザーの多対1の関係があった場合... 1つのアドレスに...それはありません.. JoinColumはユーザーエンティティにあります(別名、双方向関連の所有側)

 * @ORM\JoinColumn(name="id_users", referencedColumnName="users_id")
 */

.. あるべき...

 * @ORM\JoinColumn(name="id_users", referencedColumnName="id_users_email_adresses")
 */

しかし...あなたの場合...

1 人のユーザーは多くのアドレスを持つ必要があります... アドレスは、双方向の 1 対多の関係の所有側になります。

ユーザー

oneToMany 、 MappedBy

住所

ManyToOne、inversedBy (+ JoinColumn)


ヒント:

@JoinColumn は自動生成されるため、完全に省略することができます...

通常、エンティティ名は単数形にする必要があります...

データベース内のこれらの複雑な id 列は、列 id を持つテーブル user を持つだけでは十分ではないのはなぜですか?

于 2013-05-27T11:30:17.320 に答える