Skip to content
This repository has been archived by the owner on Sep 15, 2022. It is now read-only.

Latest commit

 

History

History
114 lines (83 loc) · 4.04 KB

7-Relation.md

File metadata and controls

114 lines (83 loc) · 4.04 KB

Relier Article à Category

Nous allons créer une nouvelle entité qui va se nommer Category, pour ce faire nous allons utiliser ce que nous connaissons, le make:entity et le make:crud.

C'est le même procédé que nous avons utilisé juste avant.

Je souhaite que dans l’entité category nous n’ayons que la variable name, au final notre entité devrait ressembler à cela sans les getters et setters :

/**
 * @ORM\Entity(repositoryClass="App\Repository\CategoryRepository")
 */
class Category
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

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

Nous allons ensuite mettre à jour l'entité Article

Pour ce faire nous allons toujours passer par la même commande qui est php bin/console make:entity

 Class name of the entity to create or update (e.g. GrumpyPuppy):
 > Article

 Your entity already exists! So let's add some new fields!

 New property name (press <return> to stop adding fields):
 > Category

 Field type (enter ? to see all types) [string]:
 > relation

 What class should this entity be related to?:
 > Category

What type of relationship is this?
 ------------ ------------------------------------------------------------------ 
  Type         Description                                                       
 ------------ ------------------------------------------------------------------ 
  ManyToOne    Each Article relates to (has) one Category.                       
               Each Category can relate/has to (have) many Article objects       
                                                                                 
  OneToMany    Each Article relates can relate to (have) many Category objects.  
               Each Category relates to (has) one Article                        
                                                                                 
  ManyToMany   Each Article relates can relate to (have) many Category objects.  
               Each Category can also relate to (have) many Article objects      
                                                                                 
  OneToOne     Each Article relates to (has) exactly one Category.               
               Each Category also relates to (has) exactly one Article.          
 ------------ ------------------------------------------------------------------ 

 Relation type? [ManyToOne, OneToMany, ManyToMany, OneToOne]:
 > ManyToOne

 Is the Article.Category property allowed to be null (nullable)? (yes/no) [yes]:
 > 

 Do you want to add a new property to Category so that you can access/update Article objects from it - e.g. $category->getArticles()? (yes/no) [yes]:
 > 

 updated: src/Entity/Article.php
 updated: src/Entity/Category.php

 Add another property? Enter the property name (or press <return> to stop adding fields):
 > 
           
  Success! 

Nous n'avons plus qu'à mettre à jour notre base de données

# php bin/console make:migration
# php bin/console doctrine:migrations:migrate 

ou

# php bin/console doctrine:schema:update —force

Il ne nous reste plus qu'à mettre à jour notre formulaire, rendons-nous sur le Form/ArticleType.php

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('title')
            ->add('content')
            ->add('category', EntityType::class, [
                'class' => Category::class,
                'choice_label' => 'name',
            ])
        ;
    }

Nous rajoutons category qui est du Type Entity, nous allons voir dans la documentation pour connaitre les différents paramètres à lui fournir : https://symfony.com/doc/current/reference/forms/types/entity.html

Nous pouvons voir qu'il faut lui donner le paramètre class pour le lié à notre entité Category, puis lui donner choice_label pour l'affichage dans notre select. Ce dernier paramètre est optionel si vous avez configuré l'appelle __toString() dans votre entité.