G. *_*ert 11 php symfony doctrine-orm
我有一个奇怪的问题:我有一个应用程序symfony 2.3(与sonata用户)我创建了一个包含一个实体 - 实体创建没有问题然后我不得不修改实体现在似乎无法修改模式:
为了看看会发生什么,我用+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;
...
Run Code Online (Sandbox Code Playgroud)
现在看看结果:
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
Run Code Online (Sandbox Code Playgroud)
没有考虑新的长度:例如,字段nom应该有length = 101,但dump-sql给出了nom VARCHAR(100)!
任何人都可以试着弄清楚什么是错的?谢谢 !
编辑:我之前尝试清除缓存:*php app/console doctrine:cache:clear-metadata*php app/console cache:clear*删除缓存文件夹中的所有内容
我也试过--dump-sql和--force.
这根本不会改变.请提示任何提示!
Yva*_*van 12
我刚刚完成了同样的问题:架构没有更新.
请注意, - 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
Run Code Online (Sandbox Code Playgroud)
即使我经常发誓:
php app/console cache:clear
Run Code Online (Sandbox Code Playgroud)
memcached数据未刷新.所以我不得不重新启动memcached,然后一切都恢复正常运行!
所以,谢谢你的问题,它让我在我的情况下找到了正确的位置.
更新:正如Phil上面提到的,运行此命令也可以解决问题:
php app/console doctrine:cache:clear-metadata
Run Code Online (Sandbox Code Playgroud)
Sam*_*adi 11
您可能忘记启用Doctrine自动映射;
orm:
#auto_mapping: true
Run Code Online (Sandbox Code Playgroud)
如果禁用自动映射(或如上所述进行注释),则应手动注册每个包的实体.
orm:
entity_managers:
default:
mappings:
AcmeHelloBundle: ~
Run Code Online (Sandbox Code Playgroud)
小智 6
运行时尝试使用YAML而不是默认注释
php app/console doctrine:generate:entity
Run Code Online (Sandbox Code Playgroud)
或者代替运行
app/console doctrine:schema:update --force
Run Code Online (Sandbox Code Playgroud)
您可以手动创建MySql表,这是一项非常繁琐的任务
bsn*_*jal -1
尝试
php app/console doctrine:schema:update --force
Run Code Online (Sandbox Code Playgroud)
这是使用实体更新您的数据库架构
归档时间: |
|
查看次数: |
58315 次 |
最近记录: |