0

三項関係をマッピングしようとしています。ER モデルは次のとおりです。 ここに画像の説明を入力

Responsable はユーザー、Alumno は別のタイプのユーザー (学生) です。また、TipoRelacion は、責任者が学生 (卒業生) の母親、父親、または家庭教師のいずれであるかを定義します。

したがって、関係 (alumno_relacion_responsable) をマップし、他のテーブルから双方向の OneToMany を定義すると思います。

私のエンティティは次のとおりです。

class Responsable{
     // other declarations

    /**
     * @ORM\OneToMany(targetEntity="ResponsableAlumno", mappedBy="alumno")
     */
    protected $hijos;

    // More declarations
}

class Alumno{
     // other declarations

    /**
     * @ORM\OneToMany(targetEntity="ResponsableAlumno", mappedBy="responsable")
     */
    protected $padres;

    // More declarations
}

したがって、relationchip エンティティでは次のようになります。

Class ResponsableAlumno{

    /**
     * @ORM\Id
     * @ORM\Column(name="Responsable_IdUsuario")
     * @ORM\ManyToOne(targetEntity="Responsable", inversedBy="idusuario")
     * @ORM\JoinColumn(name="Responsable_IdUsuario", referencedColumnName="idusuario")
     */

    protected $responsable;

    /**
     * @ORM\Id
     * @ORM\Column(name="Alumno_IdUsuario")
     * @ORM\ManyToOne(targetEntity="Alumno", inversedBy="idusuario")
     * @ORM\JoinColumn(name="Alumno_IdUsuario", referencedColumnName="idusuario")
     */
    protected $alumno;

    // Other declarations
}

しかし、エンティティをテストするとき、Symfony は (ロード スクリプトで) 言います:

注意: 未定義のインデックス: /var/www/AppsManantiales/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php の卒業生

私のエラーは何ですか?

4

1 に答える 1

1

inversedBy 設定は、関連付けられたエンティティの ID ではなく、「hijos」と「padres」に一致する必要があります。他にもいくつか問題があります。ORM\Id をリレーショナル列に指定してはならず、Column も指定する必要はありません。

class ResponsableAlumno{

    /**
     * @ORM\ManyToOne(targetEntity="Responsable", inversedBy="hijos")
     * @ORM\JoinColumn(name="Responsable_IdUsuario", referencedColumnName="idusuario")
     */

    protected $responsable;

    /**
     * @ORM\ManyToOne(targetEntity="Alumno", inversedBy="padres")
     * @ORM\JoinColumn(name="Alumno_IdUsuario", referencedColumnName="idusuario")
     */
    protected $alumno;

    // Other declarations
}

ただし、関係が反転していると思いますが、次のようなものを探していると思います。

  • 多くの責任者が一人の責任者に責任を負う同窓生
  • 多くの卒業生から 1 人の責任ある卒業生へ
  • One ResponsableAlumno to Many Responsable
  • 一人の責任ある卒業生から多くの卒業生へ

または、1 つの卒業生から 1 つの責任ある卒業生へ、またはその逆の可能性が高くなります。

Doctrine のリレーションシップ構文と設定に関する完全なドキュメントについては、こちらを確認してください: http://docs.doctrine-project.org/en/2.1/reference/association-mapping.html

于 2013-11-02T22:12:17.333 に答える