我有一个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:更新检测实体更新时的更新特征文件,我失去了与特征共享代码的部分优势。
答案 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
吗?在我的情况下,添加此行会有所帮助。