我安装了Sonata Admin软件包来管理在线图书馆。我只想将image
与author
相关联。
映射是正确的: [Mapping] OK - 映射文件正确。 [数据库]正常 - 数据库架构与映射文件同步。
这是我的author
实体的字段:
/**
*
* @ORM\Column(name="image", type="string", length=255)
* @ORM\OneToOne(targetEntity="Project\BackendBundle\Entity\Image", cascade={"persist"})
* @ORM\JoinColumn(nullable=false)
*/
private $image;
我为每个实体创建一个Admin类:
ImageAdmin.php正常运行。当我添加新图像时,数据库会更新并上传图像。
然后我依靠文档(http://sonata-project.org/bundles/admin/master/doc/reference/form_types.html#sonata-type-admin)创建了AuthorAdmin。
AuthorAdmin.php
class AuthorAdmin extends Admin
{
// Fields to be shown on create/edit forms
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('name', 'text', array('label' => 'Author name'))
->add('image', 'sonata_type_admin')
;
}
// Fields to be shown on filter forms
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper
->add('name')
;
}
// Fields to be shown on lists
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->addIdentifier('name')
;
}
}
但我总是有这样的信息:
当前字段
image
未链接到管理员。请创建一个 对于目标实体:``
管理员设置在admin.yml:
中services:
sonata.admin.author:
class: Project\BackendBundle\Admin\AuthorAdmin
tags:
- { name: sonata.admin, manager_type: orm, group: "Content", label: "Author" }
arguments:
- ~
- Project\BackendBundle\Entity\Author
- ~
sonata.admin.image:
class: Project\BackendBundle\Admin\ImageAdmin
tags:
- { name: sonata.admin, manager_type: orm, group: "Content", label: "Image" }
arguments:
- ~
- Project\BackendBundle\Entity\Image
- 'SonataAdminBundle:CRUD'
我遵循了所有文档,但现在我没有看到问题。
答案 0 :(得分:4)
您的映射不正确。不应该有这样的界限。
@ORM\Column(name="image", type="string", length=255)
@ORM\Column
会覆盖@ORM\OneToOne
,而Doctrine会将此字段视为简单字段,而不是关联字段。
http://doctrine-orm.readthedocs.org/en/latest/reference/annotations-reference.html#annref-onetoone