2016-05-29 17 views
0

私はPHPで初心者です。私はsymfonyで仕事を始めたが、私はこの問題を持っているOneToMany ManyToOne DoctrineORMエラー

/** 
* @ORM\Entity 
* @ORM\Table(name="fos_user") 
*/ 

class User extends BaseUser 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
* @param \Doctrine\Common\Collections\Collection $carList 
* @ORM\OneToMany(targetEntity="AppBundle\CarBundle\Entity\Car", mappedBy="name", cascade={"persist"}) 
*/ 
    private $carList; 

//getters and setters 

}

 * 
* @ORM\Entity(repositoryClass="AppBundle\CarBundle\Repository\Entity\CarRepository") 
* @ORM\Table(name="car") 
*/ 
class Car 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    * 
    * 
    */ 
    protected $id; 



    /** 
* @ORM\Column(type="string", length=100) 
* @ORM\ManyToOne(targetEntity="AppBundle\UserBundle\Entity\User" , inversedBy="carList") 
* @ORM\JoinColumn(name="user_id", referencedColumnName="id") 

*/  
    private $name; 

//getters and setters 

} 

スタックトレースは言う:

のSymfony \コンポーネント\デバッグ\例外の\ ContextErrorException:注意:未定義のインデックスを:名前 (n/a)

a NDとき、私はPHPのbin /コンソール教義を実行します。スキーマ:

を検証し、[マッピング] FAIL - エンティティクラスのAppBundle \ UserBundle \エンティティ\ユーザーズ マッピングが無効です: *関連AppBundle \ UserBundle \ Entity \ User#carListは、関連付けとして定義された ではない、所有サイドフィールドAppBundle \ CarBundle \ Entity \ Car#nameを参照しますが、フィールドとして定義されています。 *関連AppBundle \ UserBundle \エンティティ\ユーザー#のcarListは 私はあなたが助けることができる、起こっていただきました!見当がつかない

存在しない所有側フィールドAppbundle \ CarBundle \エンティティ\カー#名を指し、私?

+0

あなたは列名との関連名を取り違えています。アソシエーションを作成するときには、そのアソシエーションの列を手動で追加する必要はありません。そのため、doctrineはそのアソシエーションを使用します。参照http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/association-mapping.html#many-to-one-unidirectional – JimL

答えて

0

関連名を列名と混在させています。アソシエーションを作成するときには、そのアソシエーションの列を手動で追加する必要はありません。そのため、doctrineはそのアソシエーションを使用します。 (Carクラスで)

このコードは$ nameフィールドはもちろん、あなたが記述している何* @ORM\Column(name="name",type="string", length=100)

間違っている車のテーブルで、通常のテキスト列であることを述べている一人のユーザが所有することができるということです多くの車、そして多くの車は1人のユーザーに属しています。私はその後、団体のオーナーや車に電話をかけますが、もちろんあなたが望むものを自由に呼び出すことができます。結合列を定義する必要はありません。

/** 
* @ORM\Entity 
* @ORM\Table(name="fos_user") 
*/ 

class User extends BaseUser 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @param \Doctrine\Common\Collections\Collection $cars 
    * @ORM\OneToMany(targetEntity="AppBundle\CarBundle\Entity\Car", mappedBy="owner", cascade={"persist"}) 
    */ 
    private $cars; 

    public function __construct() 
    { 
     $this->cars = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 

    //getters and setters 
} 

/** 
* 
* @ORM\Entity(repositoryClass="AppBundle\CarBundle\Repository\Entity\CarRepository") 
* @ORM\Table(name="car") 
*/ 
class Car 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @ORM\ManyToOne(targetEntity="AppBundle\UserBundle\Entity\User" , inversedBy="cars") 
    */  
    private $owner; 

//getters and setters 

} 

続きを読む:Doctrine association mapping

はそれが理にかなって願っています:)

+0

ありがとうございます –

+0

@JonStumber np、それかもしれません実際にそれを得る前にいくつかの関連付けのマッピングを取る。 dbスキーマを生成し、それがどのように見えるか、そして異なるアソシエーションが異なるタイプのカラム/テーブルを作成する方法を見るために、関連するエンティティを作成することをお勧めします。私はこの記事のレイアウトについても考えてみることをお勧めします。あなたが作っているものは確かではありませんが、少なくともここでは、歴史的にも現代的にも、子供たちのためにより高価な車に共同サインすることは珍しいことではありません。 – JimL

関連する問題