我有一个在实体之间共享代码的 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
吗?在我的情况下,添加此行会有所帮助。