gpt4 book ai didi

php - 迁移数据库模式时出现 MySQL 错误,Doctrine with Symfony

转载 作者:行者123 更新时间:2023-11-28 23:17:59 25 4
gpt4 key购买 nike

我正在使用以 MySQL 作为数据库的 Symfony 框架开发一个网络应用程序。我正在使用学说来做 ORM 来映射数据库。我创建了模式并执行了 doctrine:migrations:diff 来验证查询并检查我的关系是否有序并且它们看起来是。但是当我想将新模式迁移到 MySQL 时,出现以下错误:Picture of the Command Line describing the error

这是商务舱

/**
* @ORM\Column(type="string")
*/
private $name;

/**
* @ORM\Column(type="string")
*/
private $stage_Of_Development;


//Relations

/**
* @ORM\ManyToOne(targetEntity="Client")
* @ORM\JoinColumn(name="client_email", referencedColumnName="clientEmail")
*/
private $client;


//Getters and Setters

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

/**
* @param mixed $client
*/
public function setClient(Client $client)
{
$this->client = $client;
}
}

这是客户端类:

<?php
/**
* @ORM\Entity
* @ORM\Table(name="client")
*/
class Client
{
/**
* @ORM\Id
* @ORM\Column(type="string", unique=true)
*/
private $clientEmail;

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

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

这是迁移:

命名空间Application\Migrations;

class Version20170325232622 extends AbstractMigration
{
/**
* @param Schema $schema
*/
public function up(Schema $schema)
{
// this up() migration is auto-generated, please modify it to your needs
$this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.');

$this->addSql('ALTER TABLE business ADD client_email VARCHAR(255) DEFAULT NULL');
$this->addSql('ALTER TABLE business ADD CONSTRAINT FK_8D36E3844FFE0C3 FOREIGN KEY (client_email) REFERENCES client (clientEmail)');
$this->addSql('CREATE UNIQUE INDEX UNIQ_8D36E38A89DB457 ON business (business_id)');
$this->addSql('CREATE INDEX IDX_8D36E3844FFE0C3 ON business (client_email)');
}

/**
* @param Schema $schema
*/
public function down(Schema $schema)
{
// this down() migration is auto-generated, please modify it to your needs
$this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.');

$this->addSql('ALTER TABLE business DROP FOREIGN KEY FK_8D36E3844FFE0C3');
$this->addSql('DROP INDEX UNIQ_8D36E38A89DB457 ON business');
$this->addSql('DROP INDEX IDX_8D36E3844FFE0C3 ON business');
$this->addSql('ALTER TABLE business DROP client_email');
}
}

模式包含更多类,客户端和业务实体包含更多属性,但为了简单起见,我只发布了产生错误的那些。我很感激任何人的帮助,因为这是我第一次使用这些技术,我有点迷路了。

最佳答案

在开发阶段,我经常需要“清除”之前的迁移,然后重新开始。如果您的数据库正在生产中,您不应该这样做!!要重新开始,您可以删除数据库,重新创建它,删除以前的迁移,然后重新运行 diff 并迁移。在 symfony3 中,我这样做:

// WARNING: This will delete your database!!!
>
> bin/console doctrine:database:drop --force
> bin/console doctrine:database:create
> rm -f app/DoctrineMigrations/*
>
> bin/console doctrine:migrations:diff
> bin/console doctrine:migrations:migrate

关于php - 迁移数据库模式时出现 MySQL 错误,Doctrine with Symfony,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43026451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com