symfony1 - symfony2 - entity manager persist doctrine
Doctrine Entity findBy de muchos a muchos (1)
Tengo una relación de muchos a muchos entre productos y colores.
Lo que trato de hacer es encontrar productos por sus colores.
p.ej)
$colours = $em->getRepository(''Xxxxx/XxxxxBundle/Entity/Colour'')->findBy(array(''name''=>''red'');
$products = $em->getRepository(''Xxxxx/XxxxxBundle/Entity/Product'')->findBy(array(''colours''=>$colours));
Esta es mi configuración de Yaml:
Xxxxx/XxxxxBundle/Entity/Product:
type: entity
manyToMany:
colours:
targetEntity: Colour
joinTable:
name: Product_Colour
joinColumns:
product_id:
referencedColumnName: id
inverseJoinColumns:
colour_id:
referencedColumnName: id
.
Xxxxx/XxxxxBundle/Entity/Colour:
type: entity
id:
id:
type: integer
generator:
strategy: AUTO
fields:
hex:
type: string
length: 320
name:
type: string
length: 320
El mensaje de error que recibo es:
Notice: Undefined index: joinColumns in /home/xxx/public_html/products/vendor/doctrine/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php line 1217
¿Alguien podría arrojar algo de luz sobre por qué esto no está funcionando?
Sé que esta es una vieja pregunta, pero si alguien más llega aquí a través de Google (como yo lo hice), tuve que evitar el findBy y usar DQL en el repositorio:
$products = $em->getRepository(''Vendor/Bundle/Entity/Product'')->findByColours($colours);
Y en el repositorio:
public function findByColours($colours)
{
$qb = $this->getEntityManager()->createQueryBuilder();
$qb ->select(array(''p''))
->from(''VendorBundle:Product'', ''p'')
->join(''p.colours'', ''c'', ''WITH'', $qb->expr()->in(''c.id'', $colours));
$result = $qb->getQuery()->execute();
return $result;
}
Es posible que deba cambiar la combinación en función de qué $ colores es. Esto supone que es una matriz de ID de color. Si se trata de una cadena, puede renunciar a in()
o si se trata de una matriz de cadenas, deberá enlazar las cadenas como parámetros (consulte el siguiente enlace). Aclaración sobre expr () y tal es en los documentos Doctrine
No sé por qué se produce el Undefined index: joinColumns
, pero este es un método para dejarlo de lado por completo. Con suerte, alguien puede aclarar el error, ya que mi solución agrega trabajo adicional a la relación Muchos a Muchos.