简体   繁体   English

奏鸣曲类型模型-父类别

[英]Sonata type model - Parent Category

I'm trying to add categories with a sonata form. 我试图用奏鸣曲形式添加类别。 My table category in my database looks like this: 我的数据库中的表类别如下所示:

在此处输入图片说明

The table contains: 该表包含:

  • id ID
  • name 名称
  • enabled 已启用
  • parent_category_id parent_category_id

The parent_category_id can be null . parent_category_id可以为null So I would like to have a select list where you can have the option to choose a parent category. 因此,我希望有一个选择列表,您可以在其中选择父类别。 But I'm a bit stuck on how creating this. 但是我对如何创建它有些困惑。 My entity Category looks like this: 我的实体类别如下:

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Category
 *
 * @ORM\Table(name="category", indexes={@ORM\Index(name="fk_category_category_idx", columns={"parent_category_id"})})
 * @ORM\Entity(repositoryClass="AppBundle\Repository\CategoryRepository")
 */
class Category
{
    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=255, nullable=false)
     */
    private $name;

    /**
     * @var boolean
     *
     * @ORM\Column(name="enabled", type="boolean", nullable=false)
     */
    private $enabled = true;

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var \AppBundle\Entity\Category
     *
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Category")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="parent_category_id", referencedColumnName="id")
     * })
     */
    private $parentCategory;

    public function __toString()
    {
        return $this->getName();
    }

    /**
     * Set name
     *
     * @param string $name
     *
     * @return Category
     */
    public function setName($name)
    {
        $this->name = $name;

        return $this;
    }

    /**
     * Get name
     *
     * @return string
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * Set enabled
     *
     * @param boolean $enabled
     *
     * @return Category
     */
    public function setEnabled($enabled)
    {
        $this->enabled = $enabled;

        return $this;
    }

    /**
     * Get enabled
     *
     * @return boolean
     */
    public function getEnabled()
    {
        return $this->enabled;
    }

    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set parentCategory
     *
     * @param \AppBundle\Entity\Category $parentCategory
     *
     * @return Category
     */
    public function setParentCategory(\AppBundle\Entity\Category $parentCategory = null)
    {
        $this->parentCategory = $parentCategory;

        return $this;
    }

    /**
     * Get parentCategory
     *
     * @return \AppBundle\Entity\Category
     */
    public function getParentCategory()
    {
        return $this->parentCategory;
    }
}

This is what I have so far without the parent category select: 这是我到目前为止没有选择父类别的内容:

<?php

// src/AppBundle/Admin/CategoryAdmin.php
namespace AppBundle\Admin;

use AppBundle\Repository\CategoryRepository;
use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Form\FormMapper;

class CategoryAdmin extends AbstractAdmin
{
    protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper
            ->add('name', 'text')
            ->add('enabled', 'checkbox');
    }

    protected function configureDatagridFilters(DatagridMapper $datagridMapper)
    {
        $datagridMapper->add('name');
    }

    protected function configureListFields(ListMapper $listMapper)
    {
        $listMapper
            ->addIdentifier('name');
    }
}

But now I'm stuck with adding the parent category select (which is not required to select). 但是现在我坚持添加父类别选择(不需要选择)。

Have you tried this: 您是否尝试过:

protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
    $datagridMapper
        ->add('name')
        ->add('parentCategory')
        ;
}

Basically, Sonata will handle types, options etc. for form field itself if your entity is properly configured. 基本上,如果您的实体配置正确,Sonata将处理表单字段本身的类型,选项等。 So, just adding property "parentCategory" should add filter by parentCategory and create dropdown with all existing Categories. 因此,只需添加属性“ parentCategory”,即可按parentCategory添加过滤条件,并使用所有现有的类别创建下拉列表。

But, honestly, your question should be minused, as it sounds like you didn't manage to read Sonata Admin documentation: https://sonata-project.org/bundles/admin/master/doc/index.html 但是,老实说,您的问题应该被忽略,因为听起来您没有设法阅读Sonata Admin文档: https ://sonata-project.org/bundles/admin/master/doc/index.html

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM