MBO-SD : De site voor software developer in het MBO
Relaties in je controller
Relaties in controllers
            Relaties zijn binnen een Entity 'gewone' properties, je kan ze dus met Getters en Setters aanroepen of aanpassen.
            In de eerste drie uitleggen, ManyToOne, OneToMany en ManyToMany gebruiken
            we het voorbeeld van Book en Author relaties. Bij de OneToOne gebruiken
            we de Order met de Invoice relaties.
        
OneToMany/ ManyToOne relatie ophalen/ tonen
            In het voorbeeld (zie maken van relaties) hadden we in de entity Author een relatie gelegd naar
            boeken, een auteur kan meerdere boeken geschreven hebben. Bij het aanmaken hebben we toen aangegeven dat het
            om een OneToMany gaat en de property hebben books genoemd. (In het meervoud). In het onderstaande voorbeeld
            hebben we een functie (method) in de BookController die alle Auteurs ophaalt en in de Controller met een
            dump() methode informatie laat zien.
            
//In de use-space heb je in ieder geval de volgende regels staan
use App\Entity\Author;
use App\Entity\Book;
use Doctrine\ORM\EntityManagerInterface;
//In de Book Class in de controller staat deze functie
public function index(EntityManagerInterface $entityManager): Response
{
    //Fetching one Author
    $author = $entityManager->getRepository(Author::class)->find(1);
    //Showing all of the books
    foreach ($author->getBooks() AS $book) {
        echo $book->getName(); //Showing the name of the book
    }
}Array met alle boeken van de
        Auteur met ID 1 in de database. Je kan als je wil ook weer door deze Array heen lopen met een foreach
        
        De auteur ophalen bij een boek
            Om de auteur te tonen gebruik je de getProperty van de auteur, dit is als het goed is in het enkelvoud
            ->getAuthor() op een book.
        
//In de use-space heb je in ieder geval de volgende regels staan
use App\Entity\Book;
use Doctrine\ORM\EntityManagerInterface;
//In de Book Class in de controller staat deze functie
public function index(EntityManagerInterface $entityManager): Response
{
    //Fetching one Book with ID 1
    $book = $entityManager->getRepository(Book::class)->find(1);
    //Getting the correct Author
    $author = $book->getAuthor();
    //Show the name of the Author Entity
    echo $author->getName();
}Aanpassen van data (Setters)
            Net als een getter functie, heb je ook een setter. Deze begint met het woordje
            set, in plaats van get (duh).
            
            De auteur is enkelvoud, je kan voor een auteur dus een Entity gebruiken in de setter.
        
$book = $entityManager->getRepository(Book::class)->find(1);
$author = $entityManager->getRepository(Author::class)->find(2);
$book->setAuthor($author);Meerdere relatie ophalen in meerdere relaties
Soms heb je een relatie met meerdere relaties die je op wilt halen (bijvoorbeeld als je een ManyToMany gemaakt hebt. Dan krijg je een for-loop in een for-loop. Een voorbeeld hier van zijn recepten met ingredienten, een ingredient kan bij meerdere recepten gebruikt worden en meerdere recepten kunnen dezelfde ingredienten hebben. Zie onderstaand voorbeeld hoe je dit in de Controller zou kunnen tonen.
//In de use-space heb je in ieder geval de volgende regels staan
use App\Entity\Recipe;
use Doctrine\ORM\EntityManagerInterface;
//In de Book Class in de controller staat deze functie
public function index(EntityManagerInterface $entityManager): Response
{
    //Fetching all the Recipes
    $recipes = $entityManager->getRepository(Recipe::class)->findAll();
    //Showing all of the books
    foreach ($recipes AS $recipe) {
        foreach ($recipe->getIngredients AS $ingredient) {
            echo $ingredient->getName();
        }
    }
}