Configuration relationnel de Doctrine

Configuration  relationnel de Doctrine
Configuration d'association

Au lieu de travailler avec des clés étrangères, Doctrine travaille toujours avec des références et convertit ces références en clés étrangères.
Il y’a certains points que vous devez comprendre tels que :
- Une référence à un objet unique est représentée par une clé étrangère.
- Une collection d'objets est représentée par de nombreuses clés étrangères pointant vers l'objet contenant la collection
- Si la référence de l'objet à l'Entité est une configuration bidirectionnelle
- Si l'entité renvoie uniquement à l'Entité, c'est une configuration Unidirectionnel

TYPES DE CONFIGURATION

  • Plusieurs pour un : - De nombreux exemples de l'Entité actuelle se réfèrent à une instance de l'Entité référée.
  • Un pour un :- Une instance de l'Entité actuelle se réfère à une instance de l'Entité référencée.
  • Un pour plusieurs : - Une instance de l'Entité actuelle comporte de nombreuses instances (références) à l'Entité référencée.

Plusieurs pour un :

-Une association de plusieurs-à-un est l'association la plus commune entre les objets.
-dans la configuration Doctrine créez une Annotation en php comme dans l’exemple ci-dessous
-Une association de plusieurs-à-un est l'association la plus commune entre les objets.
-dans la configuration Doctrine créez une Annotation en php comme ci-dessous

<?php
/** @Entity */
class User
{
    /**
    * Many Users have One Address.
    * @ManyToOne(targetEntity="Address")
    * @JoinColumn(name="address_id", referencedColumnName="id")
    */
    private $address;
}

/** @Entity */
class Address
{
    // ...
}

Un pour un 

- Voici une relation individuelle entre un client et un navigateur.
-Le navigateur a une référence au client, donc il est bidirectionnel.

<?php
/** @Entity */
class Customer
{
    // ...
    /**
    * One Customer has One Cart.
    * @OneToOne(targetEntity="Cart", mappedBy="customer")
    */
    private $cart;
    // ...
}

/** @Entity */
class Cart
{
    // ...
    /**
    * One Cart has One Customer.
    * @OneToOne(targetEntity="Customer", inversedBy="cart")
    * @JoinColumn(name="customer_id", referencedColumnName="id")
    */
    private $customer;
    // ...
}

Un pour plusieurs 

Une association d’un pour plusieurs doit être bidirectionnelle, sauf si vous utilisez une table jointe supplémentaire.
Il est nécessaire, en raison de la clé étrangère dans une association d’un pour plusieurs, qu’elle soit  définie à "plusieurs" endroits
Doctrine a besoin d'une association de plusieurs-à-un qui définit la configuration de cette clé étrangère.

<?php

use DoctrineCommonCollectionsArrayCollection;

/** @Entity */
class Product
{
    // ...
    /**
    * One Product has Many Features.
    * @OneToMany(targetEntity="Feature", mappedBy="product")
    */
    private $features;
    // ...
    public function __construct() {
         $this->features = new ArrayCollection();
    }
}

/** @Entity */
class Feature
{
    // ...
    /**
    * Many Features have One Product.
    * @ManyToOne(targetEntity="Product", inversedBy="features")
    * @JoinColumn(name="product_id", referencedColumnName="id")
    */
   
    private $product;
    // ...
}

Utilisez ce lien pour en savoir plus: configuration d'association
// ...
}