Symfony2命令“doctrine:schema:update”不检测实体中使用的特征文件更改

时间:2014-01-14 18:22:50

标签: php symfony doctrine-orm doctrine traits

我有一个Trait文件,实体之间有共享代码。

特质文件示例:

<?php
namespace Acme\CmsBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
* BaseHtml Trait
*
*/
trait BaseHtml
{

    /**
    * @var integer
    *
    * @ORM\Column(name="status", type="string", length=20)
    */
    private $status;

    /**
    * @var \DateTime
    *
    * @ORM\Column(name="date", type="datetime")
    */
    private $date;

    public function setStatus($status)
    {
        $this->status = $status;

        return $this;
    }

    public function getStatus()
    {
        return $this->status;
    }

    public function setDate($date)
    {
        $this->date = $date;

        return $this;
    }

    public function getDate()
    {
        return $this->date;
    }

}

实体文件示例:

<?php

namespace Acme\CmsBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
* Page
*
* @ORM\Table()
* @ORM\Entity
* 
* 
*/
class Page
{

    use BaseHtml;


    /**
    * @var integer
    *
    * @ORM\Column(name="id", type="integer")
    * @ORM\Id
    * @ORM\GeneratedValue(strategy="AUTO")
    */
    private $id;

    /**
    * @var string
    *
    * @ORM\ManyToOne(targetEntity="Application\Sonata\MediaBundle\Entity\Gallery") 
    */
    private $gallery;



    public function getId()
    {
        return $this->id;
    }


    public function setGallery(\Application\Sonata\MediaBundle\Entity\Gallery $gallery)
    {
        $this->gallery = $gallery;

        return $this;
    }


    public function getGallery()
    {
        return $this->gallery;
    }
}

但是当我修改特征文件的注释或添加新列并执行“php app / console doctrine:schema:update”时:

Nothing to update - your database is already in sync with the current entity metadata.

我需要手动更改所有实体文件的日期修改,这些文件使用traits文件来获取doctrine:schema:update正常运行。

我尝试了命令

php app/console doctrine:cache:clear-metadata
php app/console cache:clear

在执行doctrine:schema:update之前,但没有结果。

任何想法都不要手动更新实体文件和doctrine:schema:更新检测实体更新时的更新特征文件,我失去了与特征共享代码的部分优势。

5 个答案:

答案 0 :(得分:8)

可能我太晚了,但如果你使用memcache,你也需要清除memcache。所以你需要做一些事情:

echo 'flush_all' | nc yourhost 11211
php app/console cache:clear
php app/console doctrine:schema:update

答案 1 :(得分:6)

尝试启用Doctrine自动映射并删除此文件夹:YourBundle \ Resources \ config \ doctrine

答案 2 :(得分:5)

您可以通过执行以下操作来强制执行此操作:

php app/console cache:clear
php app/console doctrine:schema:update --force

答案 3 :(得分:2)

您可能忘记启用Doctrine自动映射;

orm:
        #auto_mapping: true

如果禁用自动映射(或如上所述进行注释),则应手动注册每个包的Entiteis。

orm:
       entity_managers:
                    default:
                        mappings:
                            AcmeHelloBundle: ~

答案 4 :(得分:1)

在课程申报前检查您的注释。有@ORM\Entity吗?在我的情况下,添加此行会有所帮助。