Tengo una entidad Doctrina con el campo de tipo de matriz:¿Cómo forzar a Doctrine a actualizar los campos de tipo de matriz?
/**
* @ORM\Table()
*/
class MyEntity
{
(...)
/**
* @var array $items
*
* @ORM\Column(type="array")
*/
private $items;
/**
* @param SomeItem $item
*/
public function addItem(SomeItem $item)
{
$this->items[] = $item;
}
(...)
}
Si añado elemento a la matriz, este código funciona correctamente:
$myEntityObject->addItems(new SomeItem());
$EntityManager->persist($myEntityObject);
$EntityManager->flush();
$myEntityObject
se guarda en la base de datos con los datos correctos (array se serializa y se deserializa al consultar la base de datos).
Desafortunadamente, cuando cambio uno de los objetos dentro de la matriz sin cambiar el tamaño de esa matriz, Doctrine no hace nada si intento guardar los cambios en la base de datos.
$items = $myEntityObject->getItems();
$items[0]->setSomething(123);
$myEntityObject->setItems($items);
$EntityManager->persist($myEntityObject);
$EntityManager->flush();
print_r($myEntityObject);
Aunque, print_r
en la última línea de código que muestra los datos modificados de objetos, Doctrina no sabe que algo ha cambiado dentro de la matriz si tamaño de la matriz no cambió. ¿Hay alguna manera de forzar a Doctrine a guardar los cambios realizados en ese campo (o informarle suavemente sobre los cambios en ese campo que se deben guardar)?
Estoy intentando esto y le atribuiré la bonificación lo antes posible si esto funciona. ¡Tu respuesta suena realmente bien! Muchas gracias @Vladim Ashikhman – Mick
¡Asombroso! Solo puedo atribuir la recompensa en 2 horas, pero es todo tuyo. Pasé bastante tiempo en esto, y para ser honesto, no soy el único. La lógica es simplemente hermosa. ¡Eres increíble! Remita esta publicación a esta [pregunta] (http://stackoverflow.com/questions/13227658/doctrine-does-not-update-a-simple-array-type-field/13232142#13232142). Resulta ser un problema muy similar. ¡Bien hecho! – Mick
He cambiado el setMethod() un poco, ahora funciona si cambias el cursor de la matriz. –