私は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
を実行することを忘れないでください)
Clientクラスの 'main_id'と 'id'の違いは何ですか?そして、なぜ 'referencedColumnName =" main_id "'をしないのですか? – meze
ええ、奇妙なことは分かっていますが、テーブルはこれと同じように作られています。実際にはidは文字列でmainIdは自動インクリメント整数です...私の編集を見て、あなたの考えを教えてください。 – Yoot
もちろん、プライマリキーなしでリレーションシップを作成することはできません... – meze