我有一个奇怪的问题: 我有一个应用程序symfony 2.3(与奏鸣曲用户) 我创建了一个包含一个实体的包 - 实体创建没有问题 然后我不得不修改实体,现在似乎无法修改架构:
为了看看会发生什么,我用+1
增加了所有的字符串长度实体代码(带注释):
namespace Too\ConfigAppBundle\Entity;
use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;
/**
* ConfigApp
*
* @ORM\Table(name="ConfigApp")
* @ORM\Entity(repositoryClass="Too\ConfigAppBundle\Entity\ActiviteRepository")
*/
class ConfigApp
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string $nom
*
* @ORM\Column(name="nom", type="string", length=101, unique=true)
*/
private $nom;
/**
* @var string $nomSlug
*
* @Gedmo\Slug(fields={"nom"}, updatable=true, separator="_")
* @ORM\Column(name="nomSlug", type="string", length=101, nullable=true)
*/
private $nomSlug;
/**
* @var string $email
*
* @ORM\Column(name="email", type="string", length=151)
*/
private $email;
/**
* @var string $telephone
*
* @ORM\Column(name="telephone", type="string", length=16)
*/
private $telephone;
/**
* @var datetime $cree_le
*
* @Gedmo\Timestampable(on="create")
* @ORM\Column(name="cree_le", type="datetime")
*/
private $cree_le;
/**
* @var datetime $modifie_le
*
* @Gedmo\Timestampable(on="update")
* @ORM\Column(name="modifie_le", type="datetime")
*/
private $modifie_le;
...
现在看到结果:
php app/console doctrine:schema:update --dump-sql
CREATE TABLE ConfigApp (id INT AUTO_INCREMENT NOT NULL, nom VARCHAR(100) NOT NULL, nomSlug VARCHAR(100) NOT NULL, email VARCHAR(150) NOT NULL, telephone VARCHAR(15) NOT NULL, cree_le DATETIME NOT NULL, modifie_le DATETIME NOT NULL, PRIMARYKEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB
没有采用新的长度: 例如,字段nom应该有长度= 101, 但dump-sql给出了nom VARCHAR(100)!
有人可以试着弄清楚什么是错的吗? 谢谢!
编辑: 我之前尝试清除缓存: * php app / console doctrine:cache:clear-metadata * php app / console cache:清除 *删除缓存文件夹中的所有内容
我也试过--dump-sql和--force。
这一切都没有改变。 请欢迎任何提示!
答案 0 :(得分:10)
我刚刚遇到了完全相同的问题:架构没有更新。
请注意--force返回与--dump-sql完全相同的东西,唯一的区别是--force对数据库运行SQL。
虽然在我的情况下,问题不是因为.orm.xml文件。这是因为我在config_dev.xml中设置了它:
doctrine:
orm:
metadata_cache_driver:
type: memcached
host: localhost
port: 11211
instance_class: Memcached
query_cache_driver:
type: memcached
host: localhost
port: 11211
instance_class: Memcached
result_cache_driver:
type: memcached
host: localhost
port: 11211
instance_class: Memcached
即使我经常发誓:
php app/console cache:clear
memcached数据没有被刷新。所以我不得不重新启动memcached,然后一切都恢复正常运行了!
非常感谢您提出的问题,这使我在我的案例中找到了正确的位置。
更新:正如Phil上面提到的,运行此命令也可以解决问题:
php app/console doctrine:cache:clear-metadata
答案 1 :(得分:10)
您可能忘记启用Doctrine自动映射;
orm:
#auto_mapping: true
如果禁用自动映射(或如上所述进行注释),则应手动注册每个包的实体。
orm:
entity_managers:
default:
mappings:
AcmeHelloBundle: ~
答案 2 :(得分:4)
运行
时,尝试使用YAML而不是默认注释php app/console doctrine:generate:entity
或者不是运行
app/console doctrine:schema:update --force
您可以手动创建MySql表,这是一项非常繁琐的任务
答案 3 :(得分:1)
我找到了解决方案: 我之前没有看到,但src \ Too \ ConfigAppBundle \ Resources \ config中有一个doctrine文件夹,其中包含一个名为ConfigApp.orm.yml的文件:
Too\ConfigAppBundle\Entity\ConfigApp:
type: entity
table: null
repositoryClass: Too\ConfigAppBundle\Entity\ConfigAppRepository
fields:
id:
type: integer
id: true
generator:
strategy: AUTO
nom:
type: string
length: '100'
nomSlug:
type: string
length: '100'
email:
type: string
length: '150'
telephone:
type: string
length: '15'
cree_le:
type: datetime
length: null
modifie_le:
type: datetime
length: null
lifecycleCallbacks: { }
我删除了此文件夹,现在再次更新架构。
当然我做了一些事来生成这个教条文件夹,但我不知道它是什么 - 如果有人能告诉我这些东西是如何生成的 - 为什么?
答案 4 :(得分:1)
我认为这是因为教条:mapping:import命令。此命令将现有数据库的模式存储到.orm.xml文件中。你可以执行这个命令。
我有同样的问题,让我花了很多时间才能找到答案。
答案 5 :(得分:1)
因为我正在使用.orm.yml
- 映射我遇到的问题是我创建了doctrine
- 文件夹,其中yml
映射存在于错误的路径下,所以我修复了将doctrine
- 文件夹移动到config
文件夹:
...\BundleName\Resources\config\doctrine\MyEntity.orm.yml
答案 6 :(得分:0)
在CLI中键入php app/console help doctrine:schema:update
--dump-sql Dumps the generated SQL statements to the screen (does no
t execute them).
...
--force Causes the generated SQL statements to be physically exec
uted against your database.
请尝试使用--force
代替--dump-sql
。
以下是缓存清除的命令:
php app/console cache:clear
不要忘记在命令命名空间之前使用help
关键字,以获取该命令的帮助消息。
希望有所帮助
答案 7 :(得分:0)
虽然@rai和其他人给出的一些答案是正确的,但是Symfony版本的另一个建议是等于或高于3.0,请使用bin / console而不是app / console,如下所示,
bin/console doctrine:schema:update --force
答案 8 :(得分:-1)
尝试
php app/console doctrine:schema:update --force
这是使用实体
更新数据库架构