首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SonataAdminBundle中添加具有关系的新实体

如何在SonataAdminBundle中添加具有关系的新实体
EN

Stack Overflow用户
提问于 2015-11-03 15:35:55
回答 1查看 396关注 0票数 1

目前,我正在建立一个网络商店,有一些产品,我想在我的系统管理。问题是,SonataAdmin不允许我编辑两个关系实体!

  1. 有"RFID“实体:
代码语言:javascript
复制
namespace Admin\IdManageBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * RFID
 *
 * @ORM\Table()
 * @ORM\Entity
 */
class RFID
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="Barcode", type="string", length=255)
     */
    private $barcode;


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

    /**
     * Set barcode
     *
     * @param string $barcode
     *
     * @return RFID
     */
    public function setBarcode($barcode)
    {
        $this->barcode = $barcode;

        return $this;
    }

    /**
     * Get barcode
     *
     * @return string
     */
    public function getBarcode()
    {
        return $this->barcode;
    }
}
  1. “产品”实体:
代码语言:javascript
复制
namespace Admin\StorageBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Product
 *
 * @ORM\Table()
 * @ORM\Entity
 */
class Product
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="Name", type="string", length=255)
     */
    private $name;

    /**
     * @var float
     *
     * @ORM\Column(name="Price", type="float")
     */
    private $price;

    /**
     * @ORM\OneToOne(targetEntity="Admin\IdManageBundle\Entity\RFID")
     */
    private $rfid;


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

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

        return $this;
    }

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

    /**
     * Set price
     *
     * @param float $price
     *
     * @return Product
     */
    public function setPrice($price)
    {
        $this->price = $price;

        return $this;
    }

    /**
     * Get price
     *
     * @return float
     */
    public function getPrice()
    {
        return $this->price;
    }

    /**
     * Set rfid
     *
     * @param \Admin\IdManageBundle\Entity\RFID $rfid
     *
     * @return Product
     */
    public function setRfid(\Admin\IdManageBundle\Entity\RFID $rfid = null)
    {
        $this->rfid = $rfid;

        return $this;
    }

    /**
     * Get rfid
     *
     * @return \Admin\IdManageBundle\Entity\RFID
     */
    public function getRfid()
    {
        return $this->rfid;
    }
}

和一个"CellPhoneGlass“实体:

代码语言:javascript
复制
namespace Admin\StorageBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * CellPhoneGlass
 *
 * @ORM\Table()
 * @ORM\Entity
 */
class CellPhoneGlass
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="Phone", type="string", length=255)
     */
    private $phone;

    /**
     * @var string
     *
     * @ORM\Column(name="Model", type="string", length=255)
     */
    private $model;

    /**
     * @ORM\ManyToOne(targetEntity="Admin\StorageBundle\Entity\Product")
     */
    private $product;


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

    /**
     * Set phone
     *
     * @param string $phone
     *
     * @return CellPhoneGlass
     */
    public function setPhone($phone)
    {
        $this->phone = $phone;

        return $this;
    }

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

    /**
     * Set model
     *
     * @param string $model
     *
     * @return CellPhoneGlass
     */
    public function setModel($model)
    {
        $this->model = $model;

        return $this;
    }

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

    /**
     * Set product
     *
     * @param \Admin\StorageBundle\Entity\Product $product
     *
     * @return CellPhoneGlass
     */
    public function setProduct(\Admin\StorageBundle\Entity\Product $product = null)
    {
        $this->product = $product;

        return $this;
    }

    /**
     * Get product
     *
     * @return \Admin\StorageBundle\Entity\Product
     */
    public function getProduct()
    {
        return $this->product;
    }
}

Sonata没有用"sonata_model_type“显示产品实体。下面是Admin类:

代码语言:javascript
复制
namespace Admin\StorageBundle\Admin;

use Sonata\AdminBundle\Admin\Admin;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Show\ShowMapper;

class CellPhoneGlassAdmin extends Admin
{
    /**
     * @param DatagridMapper $datagridMapper
     */
    protected function configureDatagridFilters(DatagridMapper $datagridMapper)
    {
        $datagridMapper
            ->tab("Product")
            ->with("")
            ->add('product', 'sonata_type_model', array(
                'class' => 'Admin\StorageBundle\Entity\Product',
                'property' => 'name',
                'by_reference' => false,
            ))
            ->end()
            ->end()

            ->tab("Glass")
            ->with("")
            ->add('phone')
            ->add('model')
            ->end()
            ->end()
        ;
    }

    /**
     * @param ListMapper $listMapper
     */
    protected function configureListFields(ListMapper $listMapper)
    {
        $listMapper
            ->tab("Product")
            ->with("")
            ->add('product', 'sonata_type_model', array(
                'class' => 'Admin\StorageBundle\Entity\Product',
                'property' => 'name',
                'by_reference' => false,
            ))
            ->end()
            ->end()

            ->tab("Glass")
            ->with("")
            ->add('phone')
            ->add('model')
            ->end()
            ->end()
        ;
    }

    /**
     * @param FormMapper $formMapper
     */
    protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper
            ->tab("Product")
            ->with("")
            ->add('product', 'sonata_type_model', array(
                'class' => 'Admin\StorageBundle\Entity\Product',
                'property' => 'name',
                'by_reference' => false,
            ))
            ->end()
            ->end()

            ->tab("Glass")
            ->with("")
            ->add('phone')
            ->add('model')
            ->end()
            ->end()
        ;
    }

    /**
     * @param ShowMapper $showMapper
     */
    protected function configureShowFields(ShowMapper $showMapper)
    {
        $showMapper
            ->tab("Product")
            ->with("Content")
            ->add('product', 'sonata_type_model', array(
                'class' => 'Admin\StorageBundle\Entity\Product',
                'property' => 'name',
                'by_reference' => false,
            ))
            ->end()
            ->end()

            ->tab("Glass")
            ->with("Content")
            ->add('phone')
            ->add('model')
            ->end()
            ->end()
        ;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-03 16:25:39

不确定我是否正确地理解了您想要的内容,我假设您希望从CellPhoneGlass表单中添加新产品。

要做到这一点,必须使用sonata_type_model_list,sonata_type_model只允许选择现有实体:

代码语言:javascript
复制
protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper
        ->tab("Product")
            ->with("")
                ->add('product', 'sonata_type_model_list')
            ->end()
        ->end()
        ->tab("Glass")
            ->with("")
                ->add('phone')
                ->add('model')
            ->end()
        ->end()
    ;
}

正式文件:definition.html#advanced-usage-many-to-one

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33503090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档