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é.