@mallory_cormier
In Symfony 5, you can join two tables using Doctrine's QueryBuilder. Here is a simple example of how to join two tables in Symfony 5:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
// src/Entity/Product.php namespace AppEntity; use DoctrineORMMapping as ORM; /** * @ORMEntity * @ORMTable(name="products") */ class Product { /** * @ORMId * @ORMGeneratedValue * @ORMColumn(type="integer") */ private $id; /** * @ORMColumn(type="string") */ private $name; /** * @ORMManyToOne(targetEntity="AppEntityCategory") * @ORMJoinColumn(name="category_id", referencedColumnName="id") */ private $category; // Getters and Setters } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
// src/Entity/Category.php namespace AppEntity; use DoctrineORMMapping as ORM; /** * @ORMEntity * @ORMTable(name="categories") */ class Category { /** * @ORMId * @ORMGeneratedValue * @ORMColumn(type="integer") */ private $id; /** * @ORMColumn(type="string") */ private $name; // Getters and Setters } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
// src/Controller/ProductController.php namespace AppController; use AppEntityProduct; use DoctrineORMEntityManagerInterface; use SymfonyComponentRoutingAnnotationRoute; class ProductController extends AbstractController { /** * @Route("/products", name="products") */ public function index(EntityManagerInterface $entityManager) { $query = $entityManager->createQueryBuilder() ->select('p, c') ->from('AppEntityProduct', 'p') ->join('p.category', 'c') ->getQuery(); $products = $query->getResult(); return $this->render('products/index.html.twig', [ 'products' => $products, ]); } } |
In this example, we are using Doctrine's QueryBuilder to select both the Product
and Category
entities and joining them on the category_id
field. This will fetch all the products along with their corresponding categories in a single query.