2011-12-30 27 views
0

私は2つのエンティティました:子テーブルからの外部キーは、クライアントのテーブルの主キーを指していませんが、とにかく私は「ドン何らかの理由でsymfonyの2:教義OneToMany関係

class Client 
{ 
    /** 
    * @var integer $mainId 
    * 
    * @ORM\Column(name="main_id", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $mainId; 

    /** 
    * @var string $id 
    * 
    * @ORM\Column(name="id", type="string", length=10, nullable=false, unique=true) 
    */ 
    private $id; 

    ... 
} 

class Child 
{ 
    /** 
    * @var integer $id 
    * 
    * @ORM\Column(name="id", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @var Client 
    * 
    * @ORM\ManyToOne(targetEntity="Client") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="client_id", referencedColumnName="id") 
    * }) 
    */ 
    private $clientId; 

    .... 
} 

をそれは問題であると思う。

私は私のコントローラで、次のアクションを実行しよう

$チャイルド>セット...
$チャイルド> SETCLIENTID($クライアント)。
$ em-> persist($ child);

私は次のエラーを取得する:

Notice: Undefined index: id in C:\wamp\www\myApp\vendor\doctrine\lib\Doctrine\ORM\Persisters\BasicEntityPersister.php line 510 

私は私のクライアントの表に@Indexのanntotationを追加しようとしましたが、私はまだエラーが出る...私はその前に問題を抱えていたことがありません

、いかなる援助も歓迎されるだろう。

EDIT

私は働く私のクライアントクラス、中$ IDに$ mainIdから "@ORM \ ID" の注釈を移動した場合。それはDoctrine 2が '非主キー'フィールドを指す外部キーを許可しないということですか?あなたのケースでreferencedColumnName="main_id"

(キャッシュをクリアして、これらの設定を変更した後doctrine:schema:update --forceを実行することを忘れないでください)

+0

Clientクラスの 'main_id'と 'id'の違いは何ですか?そして、なぜ 'referencedColumnName =" main_id "'をしないのですか? – meze

+0

ええ、奇妙なことは分かっていますが、テーブルはこれと同じように作られています。実際にはidは文字列でmainIdは自動インクリメント整数です...私の編集を見て、あなたの考えを教えてください。 – Yoot

+0

もちろん、プライマリキーなしでリレーションシップを作成することはできません... – meze

答えて

0

なぜドンを動作するはずですので

1

referencedColumnNameは、@ORM\Idセットを持って列に設定する必要があります外部キーなど、データベース上のすべてを設計するだけで、ここでこれを使用してデータベースに基づいてエンティティを作成するだけですか?

http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html

は私のために完全に働きました。