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