[英]Doctrine Many-To-Many
Tags Entity : 标签实体:
<?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;
}
}
Holiday Packages : 假期套餐:
<?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;
}
}
I am trying to create many-to-many assocation mapping. 我正在尝试创建多对多关联映射。 I follow this link : http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html to make this mapping. 我遵循以下链接: http : //docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html进行此映射。
But when i try to update doctrine, error occure : 但是当我尝试更新学说时,发生了错误:
[Doctrine\\DBAL\\DBALException] [Doctrine \\ DBAL \\ DBALException]
An exception occurred while executing 'ALTER TABLE holiday_tags DROP PRIMARY KEY': 执行“ ALTER TABLE holiday_tags DROP PRIMARY KEY”时发生异常:
SQLSTATE[42000]: Syntax error or access violation: 1075 Incorrect table definition; SQLSTATE [42000]:语法错误或访问冲突:1075不正确的表定义;默认值为0。 there can be only one auto column and it must be defined as a key 只能有一个自动列,并且必须将其定义为键
[PDOException] [PDOException]
SQLSTATE[42000]: Syntax error or access violation: 1075 Incorrect table definition; SQLSTATE [42000]:语法错误或访问冲突:1075不正确的表定义;默认值为0。 there can be only one auto column and it must be defined as a key 只能有一个自动列,并且必须将其定义为键
orm:schema-tool:update [--complete] [--dump-sql] [--force] orm:schema-tool:update [--complete] [--dump-sql] [--force]
UPDATE UPDATE
Entity Class : 实体类别:
<?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;
}
}
It creates a class holidaypackages_tags but still give error and i specified name as holiday_tags but it named holidaypackages_tags... 它创建了一个类holidaypackages_tags,但仍然给出错误,我将名称指定为holiday_tags,但它命名为holidaypackages_tags ...
You are trying to create the same table twice "holiday_tags"
! 您试图两次创建相同的表"holiday_tags"
!
Try this: 尝试这个:
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;
//...
}
Notice that there is no annotation to create the same table again on $holiday_packages
field 请注意,没有注释可以在$holiday_packages
字段上再次创建同一表
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.