0

ドクトリン 2 で次の問題が発生しました。住所エンティティと国エンティティをユーザー エンティティに結合したいと考えています。そのため、いくつかの試行の後、データベースで正常に動作しますが、使用する./vendor/bin/doctrine-module orm:validate-schema と、マッピングでいくつかの失敗が示されます。

[Mapping]  FAIL - The entity-class 'User\Entity\Adress' mapping is invalid:
* The association User\Entity\Adress#user refers to the inverse side field User\Entity\User#use
r_id which does not exist.
* The association User\Entity\Adress#country refers to the inverse side field User\Entity\Count
ry#id which is not defined as association.
* The association User\Entity\Adress#country refers to the inverse side field User\Entity\Count
ry#id which does not exist.

私のデータベースはこのようにうまく機能するので、なぜこれが起こったのか本当にわかりません。住所のユーザーと国のエンティティ、および値も認識します。

私のユーザーエンティティ:

   ...
    /**
 * Entity Class representing a post of our User module.
 * 
 * @ORM\Table(name="user")
 * @ORM\Entity(repositoryClass="User\Repository\UserRepository")
 * 
 * @property int userid
 * @property string firstname
 * @property string insertion
 * @property string lastname
 * @property date dateofbirth
 * @property string gender
 * @property string phonenumber
 * @property string mobile
 */
    class User extends zfcUser implements UserInterface
    {
        /**
         * Id from user
         * 
         * @ORM\OneToMany(targetEntity="Adress", mappedBy="user", cascade= "remove")
         * @access protected
         */

        /**
         * Firstname of our user
         *
         * @ORM\Column(type="string", nullable=true)
         * @var string
         * @access protected
         */
        protected $firstname;

    ...
    ...

私の住所エンティティ:

/**
 * Entity Class representing our Adress module.
 *
 * @ORM\Entity
 * @ORM\Table(name="adress")
 * @property integer addressid
 * @property string street
 * @property integer number
 * @property string addition
 * @property string zipcode
 * @property integer userid
 * @property integer countryid
 */
class Adress
{

...
...

/** 
     * @ORM\ManyToOne(targetEntity="User", inversedBy="user_id")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="user_id")
     * @var User[]
     * @access protected
     */
    protected $user;

    /**
     * @ORM\ManyToOne(targetEntity="Country", inversedBy="id")
     * @ORM\JoinColumn(name="country_id", referencedColumnName="id")
     * @var Country[]
     * @access protected
     */
    protected $country;

...
...

私の国のエンティティ:

   ...
    ...
    /**
 * Entity Class representing our Country module.
 *
 * @ORM\Entity
 * @ORM\Table(name="country")
 * @property integer id
 * @property string countrycode
 * @property string countryname
 */
    class Country
    {
    /**
         * Id from a country
         * 
         * @ORM\Id
         * @ORM\Column(type="integer")
         * @ORM\GeneratedValue(strategy="AUTO")
         * @ORM\OneToMany(targetEntity="Adress", mappedBy="country")
         * @var int
         * @access protected
         */
        protected $id;

    ...
    ...

なぜこれが起こったのか説明してください。

4

1 に答える 1

4

最初のエラーの場合:

あなたのUserクラスでは、アドレスに関連するプロパティが欠落しているため、2 つの可能性があります。

  1. その場合protected $user_id: Doctrine はこの場所でアドレス オブジェクトの配列を想定しているため、これは機能しません。
  2. その場合:ユーザー プロパティのクラスprotected $addressesのマッピングを次のように変更する必要があります。Address

    @ORM\ManyToOne(targetEntity="User", inversedBy="addresses")

2 番目のエラーの場合:

Addressクラスでは、country の inversedBy 属性を削除する必要があります。

@ORM\ManyToOne(targetEntity="Country")
于 2013-04-16T15:37:41.020 に答える