Symfony2,Sonata MediaBundle:向表中添加新字段

Posted

技术标签:

【中文标题】Symfony2,Sonata MediaBundle:向表中添加新字段【英文标题】:Symfony2, Sonata MediaBundle : add new fields to table 【发布时间】:2015-04-29 02:25:48 【问题描述】:

我正在尝试在 Sonata MediaBundle 中为 GalleryHasMedia 添加 4 个新字段。

我正确地覆盖了 GalleryHasMediaAdmin:

为了覆盖它,我在 services.yml 中添加了这一行:

parameters:
    sonata.media.admin.gallery_has_media.class: Application\Sonata\MediaBundle\Admin\GalleryHasMediaAdmin

我不得不手动创建方法(getName 和其他),因为 php app/console 学说:generate:entities ApplicationSonataMediaBundle:GalleryHasMedia 显然不关心我在自定义实体 Application\Sonata\MediaBundle\Entity\GalleryHasMedia 中设置的新字段。

以及 --dump-sql 返回“没有更新”。但是方法(getName 和 else)在 Sonata 管理员中是正确识别的,那么为什么不是新字段呢?

这里是我的自定义实体:

<?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

我正在使用自动映射,因此我的自定义实体已正确映射:

[确定] Application\Sonata\MediaBundle\Entity\GalleryHasMedia

这里是实际的表(奏鸣曲的默认表):

那么有什么想法为什么我不能向 gallery_has_media 表添加任何新字段?

更新:

我猜这是因为我正在使用注释。如何继续使用注释并使其与我的数据库同步?

这家伙遇到了类似的问题Issue

【问题讨论】:

【参考方案1】:

好的,我找到了正确解释here的答案。

删除 Application/Sonata/MediaBundle/Resources/config/doctrine 允许我在自定义实体中使用注释。

【讨论】:

以上是关于Symfony2,Sonata MediaBundle:向表中添加新字段的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2,Sonata MediaBundle:向表中添加新字段

Symfony2 - Sonata adminbundle 菜单不会显示

在 symfony2 sonata 管理包中设置默认值

Symfony2 覆盖 Sonata 媒体图像提供程序。(将接口传递给构造函数)

Symfony2 Sonata Media Bundle -- 上传图片时出错

sonata AdminBlockServiceInterface 弃用,以明确安装 symfony 2.8 + sonata 3.10