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();
}