2017-01-08 10 views
0

タグエンティティ:教義多対多

<?php 

namespace App\Entity; 

use App\Entity; 
use Doctrine\ORM\Mapping; 

/** 
* @Entity 
* @Table(name="tags", options={"collate":"utf8_general_ci", "charset":"utf8", "engine":"MyISAM"}) 
*/ 
class Tags extends Entity { 

    /** 
    * Many Tags have Many HolidayPackages. 
    * @ManyToMany(targetEntity="HolidayPackages", mappedBy="tags") 
    * @JoinTable(name="holiday_tags", 
    *  joinColumns={@JoinColumn(name="tid", referencedColumnName="id")}, 
    *  inverseJoinColumns={@JoinColumn(name="hpid", referencedColumnName="id")} 
    *  ) 
    */ 
    protected $holiday_packages; 

    /** 
    * @Column(type="string", length=255) 
    * @var string 
    */ 
    protected $tags; 

    /** 
    * @return mixed 
    */ 
    public function getHolidayPackages() { 
     return $this->holiday_packages; 
    } 

    /** 
    * @param mixed $holiday_packages 
    */ 
    public function setHolidayPackages($holiday_packages) { 
     $this->holiday_packages = $holiday_packages; 
    } 

    /** 
    * @return string 
    */ 
    public function getTags() { 
     return $this->tags; 
    } 

    /** 
    * @param string $tags 
    */ 
    public function setTags($tags) { 
     $this->tags = $tags; 
    } 
} 

格安パッケージ:

<?php 

namespace App\Entity; 

use App\Entity; 
use Doctrine\ORM\Mapping; 

/** 
* @Entity 
* @Table(name="holiday_packages", options={"collate":"utf8_general_ci", "charset":"utf8", "engine":"MyISAM"}) 
*/ 
class HolidayPackages extends Entity { 

    /** 
    * Many HolidayPackages have Many Tags. 
    * @ManyToMany(targetEntity="Tags", inversedBy="holiday_packages") 
    * @JoinTable(name="holiday_tags", 
    *  joinColumns={@JoinColumn(name="hpid", referencedColumnName="id")}, 
    *  inverseJoinColumns={@JoinColumn(name="tid", referencedColumnName="id")} 
    *  ) 
    */ 
    protected $tags; 

    /** 
    * @return mixed 
    */ 
    public function getTags() { 
     return $this->tags; 
    } 

    /** 
    * @param mixed $tags 
    */ 
    public function setTags($tags) { 
     $this->tags = $tags; 
    } 
} 

私は多対多assocationマッピングを作成しようとしています。私はこのリンクに従う: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.htmlこのマッピングを作る。
SQLSTATE [42000]:構文

しかし、私は教義を更新しようとすると、エラーがoccure: 'ALTER TABLE holiday_tags DROP PRIMARY KEY' を実行しながら

[教義\ DBAL \ DBALException]
例外が発生しましたエラーまたはアクセス違反:1075不正なテーブル定義。自動列が1つしかなく、キーとして定義する必要があります。

[PDOException]
SQLSTATE [42000]:構文エラーまたはアクセス違反:1075不正なテーブル定義です。そこに一つだけ自動カラムとすることができ、それは鍵

ORMのように定義されなければならない:スキーマツール:更新[--complete] [--dump-SQL] [--force]

UPDATE

エンティティクラス:それはクラスholidaypackages_tagsを作成しますが、それでもエラーを与えると私はholiday_tagsとして名を指定したが、それはholidaypackages_tagsという名前

<?php 

namespace App; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* @MappedSuperclass 
* @HasLifecycleCallbacks() 
*/ 
abstract class Entity 
{ 
    /** 
    * @var integer 
    * 
    * @Column(name="id", type="integer") 
    * @Id 
    * @GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @Column(type="datetime") 
    * @var \DateTime 
    */ 
    protected $created_at; 

    /** 
    * @Column(type="datetime", nullable=true) 
    * @var \DateTime 
    */ 
    protected $updated_at; 

    /** 
    * Constructor 
    */ 
    public function __construct() { 
     $this->setCreatedAt(new \DateTime()); 
     $this->setUpdatedAt(new \DateTime()); 
    } 

    /** 
    * @PreUpdate 
    */ 
    public function setUpdatedValue() { 
     $this->setUpdatedAt(new \DateTime()); 
    } 

    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() { 
     return $this->id; 
    } 

    /** 
    * @param $created_at 
    */ 
    public function setCreatedAt($created_at) { 
     $this->created_at = $created_at; 
    } 

    /** 
    * @return \DateTime 
    */ 
    public function getCreatedAt() { 
     return $this->created_at->format('d/m/Y H:i'); 
    } 

    /** 
    * @param $updated_at 
    */ 
    public function setUpdatedAt($updated_at) { 
     $this->updated_at = $updated_at; 
    } 

    /** 
    * @return \DateTime 
    */ 
    public function getUpdatedAt() { 
     return $this->updated_at; 
    } 
} 

...

+0

@ManyToMany注釈を持って両方のフィールドは、中ArrayCollection' 'で初期化する必要がありますコンストラクタ。 –

答えて

0

同じテーブルを2回作成しようとしています"holiday_tags"

これを試してみてください:$holiday_packagesフィールドに再び同じテーブルを作成するために、何の注釈がない

class Tags extends Entity { 

    /** 
    * Many Tags have Many HolidayPackages. 
    * @ManyToMany(targetEntity="HolidayPackages", mappedBy="tags") 
    */ 
    protected $holiday_packages; 

//... 
} 


class HolidayPackages extends Entity { 

    /** 
    * Many HolidayPackages have Many Tags. 
    * @ManyToMany(targetEntity="Tags", inversedBy="holiday_packages") 
    * @JoinTable(name="holiday_tags", 
    *  joinColumns={@JoinColumn(name="hpid", referencedColumnName="id")}, 
    *  inverseJoinColumns={@JoinColumn(name="tid", referencedColumnName="id")} 
    *  ) 
    */ 
    protected $tags; 
//... 
} 

お知らせこと

関連する問題