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



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

特征文件示例:

<?php
namespace AcmeCmsBundleEntity;
use DoctrineORMMapping as ORM;
/**
* BaseHtml Trait
*
*/
trait BaseHtml
{
    /**
    * @var integer
    *
    * @ORMColumn(name="status", type="string", length=20)
    */
    private $status;
    /**
    * @var DateTime
    *
    * @ORMColumn(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 AcmeCmsBundleEntity;
use DoctrineORMMapping as ORM;
/**
* Page
*
* @ORMTable()
* @ORMEntity
* 
* 
*/
class Page
{
    use BaseHtml;

    /**
    * @var integer
    *
    * @ORMColumn(name="id", type="integer")
    * @ORMId
    * @ORMGeneratedValue(strategy="AUTO")
    */
    private $id;
    /**
    * @var string
    *
    * @ORMManyToOne(targetEntity="ApplicationSonataMediaBundleEntityGallery") 
    */
    private $gallery;

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

    public function setGallery(ApplicationSonataMediaBundleEntityGallery $gallery)
    {
        $this->gallery = $gallery;
        return $this;
    }

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

但是当我修改 trait 文件的注释或添加新列并执行"php 应用程序/控制台原则:架构:更新"时:

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

我需要手动更改所有使用特征文件的实体文件的日期修改,以获取原则:模式:更新正常运行。

我尝试使用命令

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

在执行原则之前:模式:更新,但没有结果。

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

也许我为时已晚,但如果你使用 memcache,你也需要清除 memcache。所以你需要做这样的事情:

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

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

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

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

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

orm:
        #auto_mapping: true

如果自动映射被禁用(或如上所述注释),您应该手动注册每个捆绑包的 Entiteis。

orm:
       entity_managers:
                    default:
                        mappings:
                            AcmeHelloBundle: ~
<</div> div class="one_answers">

在类声明之前检查您的注释。有@ORMEntity吗?在我的情况下,添加此行会有所帮助。

相关内容

  • 没有找到相关文章

最新更新