Añadir entidades relacionadas

Si tenemos una entidad producto relacionada con categorías, y queremos dar de alta un producto, tendremos que indicar cual es su categoría y esto lo tenemos que hacer con entidades. Si la categoría no existe lo hacemos así:

  $categoria=new Categoria();
        $categoria->setNombre('Tornillería');
        
        $producto = new Producto();
        $producto->setNombre('Tornillo');
        $producto->setPrecio(20);
        $producto->setCategoria($categoria);
        
        $entityManager = $this->getDoctrine()->getManager();
        $entityManager->persist($categoria);
        $entityManager->persist($producto);
        $entityManager->flush();

Si la categoría ya existe lo hacemos así:

 $categoria = $this->getDoctrine()
                ->getRepository(Categoria::class)
                ->find(1);

        $producto = new Producto();
        $producto->setNombre('Arandela');
        $producto->setPrecio(30);

           $producto->setCategoria($categoria);
        
        $entityManager = $this->getDoctrine()->getManager();
        $entityManager->persist($producto);
        $entityManager->flush();

o así:

 $categoria = $this->getDoctrine()
                ->getRepository(Categoria::class)
                ->find(1);

        $producto = new Producto();
        $producto->setNombre('Arandela');
        $producto->setPrecio(30);

        $categoria->addProducto($producto);
        
        $entityManager = $this->getDoctrine()->getManager();
        $entityManager->persist($producto);
        $entityManager->flush();

Para acceder a los productos de una categoría lo podemos hacer así:

  $categoria = $this->getDoctrine()
                ->getRepository(Categoria::class)
                ->find(1);

        $productos = $categoria->getProductos();
        foreach($productos as $producto){
            echo $producto->getNombre();
        }