Symfony2、Sonata MediaBundle:向 table 添加新字段
Symfony2, Sonata MediaBundle : add new fields to table
我正在尝试在 GalleryHasMedia 的 Sonata MediaBundle 中添加 4 个新字段。
我正确地覆盖了 GalleryHasMediaAdmin:
为了覆盖它,我在 services.yml 中添加了这一行:
parameters:
sonata.media.admin.gallery_has_media.class: Application\Sonata\MediaBundle\Admin\GalleryHasMediaAdmin
因为 php app/console doctrine:generate:entities ApplicationSonataMediaBundle:GalleryHasMedia 我必须手动创建方法(getName 和其他)
显然不关心我在自定义实体中设置的新字段 Application\Sonata\MediaBundle\Entity\GalleryHasMedia.
以及 --dump-sql return "Nothing to update"。但是方法(getName 和 else)在 Sonata admin 中被正确识别,那么为什么不使用新字段?
这里是我的自定义实体:
<?php
namespace Application\Sonata\MediaBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Sonata\MediaBundle\Entity\BaseGalleryHasMedia as BaseGalleryHasMedia;
/**
* @ORM\Entity
* @ORM\Table(name="media__gallery_media")
*/
class GalleryHasMedia extends BaseGalleryHasMedia
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string", length=64, nullable=false, name="name")
**/
private $name;
/**
* @ORM\Column(type="string", length=64, nullable=false, name="activity")
**/
private $activity;
/**
* @ORM\Column(type="text", nullable=false, name="description")
*/
private $description;
/**
* @ORM\Column(type="string", length=255, nullable=false, name="code")
**/
private $link;
/**
* Get id
*
* @return integer $id
*/
public function getId()
{
return $this->id;
}
/**
* Set name
*
* @param string $name
* @return GalleryHasMedia
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Set activity
*
* @param string $activity
* @return GalleryHasMedia
*/
public function setActivity($activity)
{
$this->activity = $activity;
return $this;
}
/**
* Get activity
*
* @return string
*/
public function getActivity()
{
return $this->activity;
}
/**
* Set description
*
* @param string $description
* @return GalleryHasMedia
*/
public function setDescription($description)
{
$this->description = $description;
return $this;
}
/**
* Get description
*
* @return string
*/
public function getDescription()
{
return $this->description;
}
/**
* Set link
*
* @param string $link
* @return GalleryHasMedia
*/
public function setLink($link)
{
$this->link = $link;
return $this;
}
/**
* Get link
*
* @return string
*/
public function getLink()
{
return $this->link;
}
}
而且我按照他们Documentation中的说法正确设置:
sonata_media:
# if you don't use default namespace configuration
class:
media: Application\Sonata\MediaBundle\Entity\Media
gallery: Application\Sonata\MediaBundle\Entity\Gallery
gallery_has_media: Application\Sonata\MediaBundle\Entity\GalleryHasMedia
我正在使用自动映射,因此我的自定义实体已正确映射:
[OK] Application\Sonata\MediaBundle\Entity\GalleryHasMedia
这里是实际的table(奏鸣曲的默认table):
为什么我不能向 gallery_has_media table 添加任何新字段?
更新:
我猜这是因为我正在使用注释。我怎样才能继续使用注释并使其与我的数据库同步?
这家伙遇到了类似的问题Issue
好的,我找到了正确解释的答案here。
删除 Application/Sonata/MediaBundle/Resources/config/doctrine 允许我在我的自定义实体中使用注释。
我正在尝试在 GalleryHasMedia 的 Sonata MediaBundle 中添加 4 个新字段。
我正确地覆盖了 GalleryHasMediaAdmin:
为了覆盖它,我在 services.yml 中添加了这一行:
parameters:
sonata.media.admin.gallery_has_media.class: Application\Sonata\MediaBundle\Admin\GalleryHasMediaAdmin
因为 php app/console doctrine:generate:entities ApplicationSonataMediaBundle:GalleryHasMedia 我必须手动创建方法(getName 和其他) 显然不关心我在自定义实体中设置的新字段 Application\Sonata\MediaBundle\Entity\GalleryHasMedia.
以及 --dump-sql return "Nothing to update"。但是方法(getName 和 else)在 Sonata admin 中被正确识别,那么为什么不使用新字段?
这里是我的自定义实体:
<?php
namespace Application\Sonata\MediaBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Sonata\MediaBundle\Entity\BaseGalleryHasMedia as BaseGalleryHasMedia;
/**
* @ORM\Entity
* @ORM\Table(name="media__gallery_media")
*/
class GalleryHasMedia extends BaseGalleryHasMedia
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string", length=64, nullable=false, name="name")
**/
private $name;
/**
* @ORM\Column(type="string", length=64, nullable=false, name="activity")
**/
private $activity;
/**
* @ORM\Column(type="text", nullable=false, name="description")
*/
private $description;
/**
* @ORM\Column(type="string", length=255, nullable=false, name="code")
**/
private $link;
/**
* Get id
*
* @return integer $id
*/
public function getId()
{
return $this->id;
}
/**
* Set name
*
* @param string $name
* @return GalleryHasMedia
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Set activity
*
* @param string $activity
* @return GalleryHasMedia
*/
public function setActivity($activity)
{
$this->activity = $activity;
return $this;
}
/**
* Get activity
*
* @return string
*/
public function getActivity()
{
return $this->activity;
}
/**
* Set description
*
* @param string $description
* @return GalleryHasMedia
*/
public function setDescription($description)
{
$this->description = $description;
return $this;
}
/**
* Get description
*
* @return string
*/
public function getDescription()
{
return $this->description;
}
/**
* Set link
*
* @param string $link
* @return GalleryHasMedia
*/
public function setLink($link)
{
$this->link = $link;
return $this;
}
/**
* Get link
*
* @return string
*/
public function getLink()
{
return $this->link;
}
}
而且我按照他们Documentation中的说法正确设置:
sonata_media:
# if you don't use default namespace configuration
class:
media: Application\Sonata\MediaBundle\Entity\Media
gallery: Application\Sonata\MediaBundle\Entity\Gallery
gallery_has_media: Application\Sonata\MediaBundle\Entity\GalleryHasMedia
我正在使用自动映射,因此我的自定义实体已正确映射:
[OK] Application\Sonata\MediaBundle\Entity\GalleryHasMedia
这里是实际的table(奏鸣曲的默认table):
为什么我不能向 gallery_has_media table 添加任何新字段?
更新:
我猜这是因为我正在使用注释。我怎样才能继续使用注释并使其与我的数据库同步?
这家伙遇到了类似的问题Issue
好的,我找到了正确解释的答案here。
删除 Application/Sonata/MediaBundle/Resources/config/doctrine 允许我在我的自定义实体中使用注释。