繁体   English   中英

教义多对多

[英]Doctrine Many-To-Many

标签实体:

<?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;
    }
}

我正在尝试创建多对多关联映射。 我遵循以下链接: http : //docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html进行此映射。

但是当我尝试更新学说时,发生了错误:

[Doctrine \\ DBAL \\ DBALException]
执行“ ALTER TABLE holiday_tags DROP PRIMARY KEY”时发生异常:
SQLSTATE [42000]:语法错误或访问冲突:1075不正确的表定义;默认值为0。 只能有一个自动列,并且必须将其定义为键

[PDOException]
SQLSTATE [42000]:语法错误或访问冲突:1075不正确的表定义;默认值为0。 只能有一个自动列,并且必须将其定义为键

orm:schema-tool:update [--complete] [--dump-sql] [--force]

UPDATE

实体类别:

<?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;
    }
}

它创建了一个类holidaypackages_tags,但仍然给出错误,我将名称指定为holiday_tags,但它命名为holidaypackages_tags ...

您试图两次创建相同的表"holiday_tags"

尝试这个:

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;
//...
}

请注意,没有注释可以在$holiday_packages字段上再次创建同一表

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM