2017-05-31 1 views
1

j'ai deux entités Ventės et de l'article avec plusieurs à plusieurs et dans la relation de l'entité est ventes_article qui ont le attribut « Quantite »:Beaucoup à beaucoup d'attributs (sonata_type_collection) dans le faisceau d'administration sonate

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

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

et ceci est mon entité article:

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

} 

et dans ma classe Ventesadmin j'ai:

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

    } 

} 

en résultat:

enter image description here

mais je veux montrer ce résultat avec Costum attributs de même article:

enter image description here

pouvez-vous me aider ??

+0

ne suis pas sûr Sonata, mais Symfony et Doctrine ne sont pas construites pour cela (utilisez plutôt STH comme Ventes <-> VentesArticle (entité propre) <-> article) – kero

+0

Je l'utilise (VentesArticle) –

+1

Non, vous avez un ManyToMany entre Ventes et Article, vous auriez besoin de ManyToMany entre Ventes et Article de Vente et ManyToMany entre VentesArticle et Article. Mais je n'ai aucune expérience avec Sonata, donc je ne suis pas le meilleur pour aider – kero

Répondre

0

Donc, dans ce cas, nous avons une collection.

prédicats:

Chaque article peut appartient à différents Venteses et un contient un Ventes beaucoup d'articles différents.

Ceci est beaucoup-à-plusieurs. Et chaque article a des attributs différents. Pour ce but, nous devons utiliser

sonaty_type_collection

exemple pour la fonction 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'), 
       ]) 
     ; 
    } 
} 

Vous aurez possibilité d'ajouter autant d'articles ou tout ce que vous voulez et avec un nombre quelconque des attributs. Voir les écrans: enter image description here enter image description here