doctrine2 - symfony2 - find by id doctrine
Doctrine 2 ORM Zend 2 Forma muchos a muchos ejemplos (2)
K, así que descubrí cómo hacerlo finalmente después de darme cuenta de que el hidratador no era vinculante para las asociaciones y tuve que crear el enlace. Voy a poner una publicación de blog completa explicando pero en caso de que todavía estés atascado. Si quieres ver todo el código juntos, lo tengo en github (enlace) . Te estoy aprendiendo / desarrollando / limpiando activamente así que es un poco complicado
Básicamente, debe recopilar los modelos seleccionados, crear el enlace de asociación agregándolos a la entidad, luego persistir la entidad WITH the cascade add / del active en Doctrine (o hacerlo manualmente persistiendo el enlace antes de la entidad).
El ejemplo siguiente es un número de muchos a muchos entre mis publicaciones y categorías
Necesita tener la cascada activa en la propiedad de su entidad
/**
* @ORM/OneToMany(targetEntity="CategoryPostAssociation", mappedBy="category", cascade={"persist", "remove"})
*/
protected $category_post_associations;
Debe empujar el administrador de objetos desde su Formulario a sus conjuntos de campo
PostFieldSet
$categoryFieldset = new CategoryFieldset($objectManager);
$this->add(array(
''type'' => ''DoctrineModule/Form/Element/ObjectMultiCheckbox'',
''name'' => ''categories'',
''options'' => array(
''label'' => ''Select Categories'',
''object_manager'' => $objectManager,
''should_create_template'' => true,
''target_class'' => ''OmniBlog/Entity/Category'',
''property'' => ''title'',
''target_element'' => $categoryFieldset,
),
));
y categoryfieldset solo tiene un cuadro de texto del Título.
En AddConction de mi PostController
public function addAction() {
// Get your ObjectManager
$objectManager = $this->getEntityManager();
//Create the form and inject the ObjectManager
//Bind the entity to the form
$form = new PostForm($objectManager);
$post = new Post();
$form->bind($post);
$request = $this->getRequest();
if ($request->isPost()) {
$form->setData($request->getPost());
if ($form->isValid()) {
/*
* Get IDs from form element
* Get categories from the IDs
* add entities to $post''s categories list
*/
$element = $form->getBaseFieldset()->get(''categories''); //Object of: DoctrineModule//Form//Element//ObjectMultiCheckbox
$values = $element->getValue();
foreach($values as $catID){
$results = $objectManager->getRepository(''OmniBlog/Entity/Category'')->findBy(array(''id'' => $catID));
$catEntity = array_pop($results);
$link = $post->addCategory($catEntity);
//Entity/Post ''s association table cascades persists and removes so don''t need to persist($link), but would be done here
}
$objectManager->persist($post);
$objectManager->flush();
return $this->redirect()->toRoute(
static::ROUTE_CHILD,
array(''controller'' => static::CONTROLLER_NAME
));
}
}
return array(''form'' => $form);
}
Arriba si ve $ post-> addCategory ($ catEntity); esto lleva a que mi Entidad o Modelo administre el enlace (estaba devolviendo el enlace del enlace Quiero manejar la conexión en cascada manualmente)
Enviar
/**
* Returns the created $link
*/
public function addCategory(Category $category){
$link = new CategoryPostAssociation();
$link->setCategory($category);
$link->setPost($this);
$this->addCategoryPostAssociations($link);
return $link;
}
¿Alguien tiene un ejemplo bueno y completo para la relación de muchos a muchos utilizando ZF2 y Doctrine 2, especialmente cuando se utiliza ObjectMultiCheckBox? Encontré este tutorial - https://github.com/doctrine/DoctrineModule/blob/master/docs/hydrator.md pero no explica cómo hacer una relación de muchos a muchos.
Encontré un buen blog donde se explica paso a paso lo que hay que hacer - http://laundry.unixslayer.pl/2013/zf2-quest-zendform-many-to-many/