2017-09-06 9 views
1

私はdoctrineとSymfonyを使用するプロジェクトに取り組んでいます。 現在、2つのエンティティ間でカスケードアノテーションを双方向関係で使用しようとすると問題が発生します。双方向関係のエラー

私は2つのエンティティを持っています。

MediaIndexer:

class MediaIndexer { 
    /** 
    * @var int 
    * @ORM\Column(type="guid") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="UUID") 
    */ 
    private $id; 

    /** 
    * @var ArrayCollection $identifiers 
    * @ORM\OneToMany(targetEntity="CelebrityBundle\Entity\MediaIdentifier", 
    *  mappedBy="indexer", 
    *  cascade={"all"}, 
    *  orphanRemoval=true) 
    */ 
    private $identifiers; 

    // ... 

    public function setValue($key, $value) { 
     foreach ($this->getIdentifiers() as $identifier) { 
      if ($identifier->getKey() == $key) { 
       $identifier->setValue($value); 

       return $this; 
      } 
     } 

     $identifier = new MediaIdentifier(); 
     $identifier->setKey($key) 
        ->setValue($value) 
        ->setIndexer($this); 

     $this->addIdentifier($identifier); 

     return $this; 
    } 
} 

MediaIdentifier:

class MediaIdentifier { 
    /** 
    * @var int 
    * @ORM\Column(type="guid") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="UUID") 
    */ 
    private $id; 

    /** 
    * @var MediaIndexer $indexer 
    * @ORM\ManyToOne(targetEntity="CelebrityBundle\Entity\MediaIndexer", inversedBy="identifiers") 
    * @ORM\JoinColumn(onDelete="CASCADE", referencedColumnName="id") 
    */ 
    private $indexer; 

    /** 
    * @var string $content 
    * @ORM\Column(name="key", type="string", length=255, nullable=false) 
    */ 
    private $key; 

    /** 
    * @var int $type 
    * @ORM\Column(name="value", type="text", nullable=false) 
    */ 
    private $value; 
    // ... 
} 

(実際には、これらのクラスは、DBの "連想配列" を構築するために使用されます)。

私は少しのコードで、この関係を試してみた:私はこのコードを実行すると、私はエラーをした、

public function testAction() 
{ 
    $indexer = new MediaIndexer(); 

    $indexer->setValue("screenName", "katyperry"); 
    $indexer->setValue("pageId", "00000"); 

    $this->getDoctrine()->getManager()->persist($indexer); 
    $this->getDoctrine()->getManager()->flush(); 
} 

そして:

An exception occurred while executing 'INSERT INTO medias_identifiers (id, key, value, indexer_id) VALUES (?, ?, ?, ?)' with params ["b8a4c4e3-9312-11e7-93c0-e55e28abe26b", "screenName", "katyperry", "b8a47f19-9312-11e7-93c0-e55e28abe26b"]: 

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'key, value, indexer_id) VALUES ('b8a4c4e3-9312-11e7-93c0-e55e28abe26b', 'screenN' at line 1 

はあなたにこの問題についてどんな考えを持っています?

おかげ

答えて

3

KEYreserved word in MariaDBです。キーの定義をbackticksで囲んでみてください。

/** 
* @var string $content 
* @ORM\Column(name="`key`", type="string", length=255, nullable=false) 
*/ 
private $key; 
+0

OMG私は月曜日からそれに乗っている!ありがとうございます:p! – graille

+0

問題ありません!私たちすべてに起こる –

関連する問題