Sonata管理包中有多个属性(sonata_type_collection)

问题描述 投票:2回答:1

我有两个实体Ventes和Article有多对多的关系,在实体关系中是ventes_article有attribut“quantite”:

    <?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Ventes
 *
 * @ORM\Table(name="ventes")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\VentesRepository")
 */
class Ventes
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    #......................



    /**
     * Many Articles have Many paks.
     * @ORM\ManyToMany(targetEntity="Article", inversedBy="Ventes")
     * @ORM\JoinTable(name="ventes_article")
     */
    private $articles;





    /**
     * Add article
     *
     * @param \AppBundle\Entity\Article $article
     *
     * @return Ventes
     */
    public function addArticle(\AppBundle\Entity\Article $article)
    {
        $this->articles[] = $article;

        return $this;
    }

    /**
     * Remove article
     *
     * @param \AppBundle\Entity\Article $article
     */
    public function removeArticle(\AppBundle\Entity\Article $article)
    {
        $this->articles->removeElement($article);
    }

    /**
     * Get articles
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getArticles()
    {
        return $this->articles;
    }

    #.............................
    #..........
}

这是我的实体文章:

    <?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Article
 *
 * @ORM\Table(name="article")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\ArticleRepository")
 */
class Article
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;


    /**
     * Many packs have Many article.
     * @ORM\ManyToMany(targetEntity="Ventes", mappedBy="Article")
     * @ORM\JoinTable(name="ventes_article")
     */
    private $ventes;

    public function __construct() {
        $this->ventes = new \Doctrine\Common\Collections\ArrayCollection();
        $this->packs = new \Doctrine\Common\Collections\ArrayCollection();
    }


#/............



/**
 * Add vente
 *
 * @param \AppBundle\Entity\Ventes $vente
 *
 * @return Article
 */
public function addVente(\AppBundle\Entity\Ventes $vente)
{
    $this->ventes[] = $vente;

    return $this;
}

/**
 * Remove vente
 *
 * @param \AppBundle\Entity\Ventes $vente
 */
public function removeVente(\AppBundle\Entity\Ventes $vente)
{
    $this->ventes->removeElement($vente);
}

/**
 * Get ventes
 *
 * @return \Doctrine\Common\Collections\Collection
 */
public function getVentes()
{
    return $this->ventes;
    }

}

在我的班级VentesAdmin我有:

    <?php

namespace AppBundle\Admin;

use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Show\ShowMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Sonata\AdminBundle\Route\RouteCollection;

class VentesAdmin extends AbstractAdmin
{



    protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper


        ->with('Acticles', array('class' => 'col-md-12'))
        ->add('articles', 'sonata_type_model', array(
            'class' => 'AppBundle\Entity\Article',
            'property' => 'reference',
            'multiple' => true,
            'required' => false,
        ))


        ->end()
        ;
    }

    protected function configureDatagridFilters(DatagridMapper $datagridMapper)
    {

    }

    protected function configureListFields(ListMapper $listMapper)
    {

    }



    protected function configureShowFields(ShowMapper $showMapper)
    {

    }

}

结果 :

enter image description here

但我想用同一篇文章的自定义属性显示此结果:

enter image description here

你能帮助我吗 ??

php symfony many-to-many sonata-admin symfony-sonata
1个回答
1
投票

所以,在这种情况下,我们有一个集合。

谓语:

每篇文章都属于不同的Venteses,One Ventes包含许多不同的文章。

这是多对多的。每篇文章都有不同的属性。为此,我们必须使用

sonata_type_collection

configureFormFields函数的示例:

class OwnerAdmin extends AbstractAdmin
{

    // ...

    protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper
            ->add('articles', 'sonata_type_collection', [
                  'required'      => false,
                  'label'         => 'Article',
                  'btn_add'       => true,
                  'btn_catalogue' => 'admin',
                  'type_options'  => [
                      'delete' => true,
                  ],
              ], [
                  'edit'          => 'inline',
                  'inline'        => 'table',
                  'sortable'      => 'id',
                  'allow_delete'  => true,
                  'placeholder'   => $this->trans('admin.placeholder.no_article'),
              ])
         ;
    }
}

您将能够添加任意数量的文章或任何您想要的内容以及任意数量的属性。见屏幕:enter image description here enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.