我有一个问题
/**
* @package Entity
* @ORM\Entity
* @ORM\Table(name="r_country")
*/
class RCountry {
/**
* @ORM\Column(type="string", length=2)
* @ORM\Id
*/
protected $id;
...
/**
*
* @ORM\ManyToMany(targetEntity="RLanguage")
* @ORM\JoinTable(name="prohibited_language_display",
* joinColumns={@ORM\JoinColumn(name="country_id", referencedColumnName="id", onDelete="CASCADE")},
* inverseJoinColumns={@ORM\JoinColumn(name="language_id", referencedColumnName="id", onDelete="CASCADE")}
* )
*
*/
protected $prohibitedLanguageDisplay;
...
}
/**
* @package Entity
* @ORM\Entity
* @ORM\Table(name="r_language")
*/
class RLanguage
{
/**
* @ORM\Column(type="string", length=20)
* @ORM\Id
*
*/
protected $id;
...
}
我正在尝试与教义进行ManyToMany关系,但是当我进行更新时会触发错误
[Doctrine \ DBAL \ Exception \ DriverException]执行'ALTER TABLE prohibited_language_display ADD CONSTRAINT FK_77B02D13F92F3E70 FOREIGN KEY(country_id)REFERENCES时发生异常r_country(id)ON DELETE CASCADE':SQLSTATE [HY000]:常规错误:1005无法创建表'数据库 . #sql-498_8797'(错误号:150)[Doctrine \ DBAL \ Driver \ PDOException]
SQLSTATE [HY000]:常规错误:1005无法创建表'数据库 . #sql-498_8797'(错误号:150)[PDOException]
SQLSTATE [HY000]:常规错误:1005无法创建表'数据库 . #sql-498_8797'(错误号:150)
这是我得到的转储sql
CREATE TABLE prohibited_language_google(country_id VARCHAR(2)NOT NULL,language_id VARCHAR(20)NOT NULL,INDEX IDX_77B02D13F92F3E70(country_id),INDEX IDX_77B02D1382F1BAF4(language_id),PRIMARY KEY(country_id,language_id))DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB ; ALTER TABLE prohibited_language_display ADD CONSTRAINT FK_77B02D13F92F3E70 FOREIGN KEY(country_id)REFERENCES r_country(id)ON DELETE CASCADE; ALTER TABLE prohibited_language_google ADD CONSTRAINT FK_77B02D1382F1BAF4 FOREIGN KEY(language_id)REFERENCES r_language(id)ON DELETE CASCADE;
我已经尝试了删除数据库并创建一个带有教条的新数据库,并且这样就可以了,但我想做一个更新,否则我会丢失我数据库中的所有数据 .
有没有人可以帮助我?
1 回答
问题是Doctrine生成了一个脚本来创建带有collation utf_unicode_ci的表,我将其更改为utf8_general_ci以便更改我必须将其添加到app / config.yml中的doctrineconfiguration中