Ho un'entità Doctrine con il campo di tipo array:Come forzare Doctrine ad aggiornare i campi del tipo di array?
/**
* @ORM\Table()
*/
class MyEntity
{
(...)
/**
* @var array $items
*
* @ORM\Column(type="array")
*/
private $items;
/**
* @param SomeItem $item
*/
public function addItem(SomeItem $item)
{
$this->items[] = $item;
}
(...)
}
Se posso aggiungere elementi alla matrice, questo codice funziona correttamente:
$myEntityObject->addItems(new SomeItem());
$EntityManager->persist($myEntityObject);
$EntityManager->flush();
$myEntityObject
viene salvato nel database con i dati corretti (array è serializzato e deserializzato durante l'interrogazione del database).
Sfortunatamente, quando cambio uno degli oggetti all'interno dell'array senza cambiare la dimensione di quell'array, Doctrine non fa nulla se sto cercando di salvare le modifiche al database.
$items = $myEntityObject->getItems();
$items[0]->setSomething(123);
$myEntityObject->setItems($items);
$EntityManager->persist($myEntityObject);
$EntityManager->flush();
print_r($myEntityObject);
Anche se, print_r
nell'ultima riga del display che codice modificato i dati dell'oggetto, Dottrina non sa che qualcosa era cambiato all'interno della matrice, se dimensione della matrice non è cambiato. Esiste un modo per forzare Doctrine a salvare le modifiche apportate in quel campo (o informarlo gentilmente delle modifiche in quel campo che devono essere salvate)?
Sto provando questo e ti attribuirò il bonus al più presto se questo funziona. La tua risposta suona davvero bene! Mille grazie @Vladim Ashikhman – Mick
Incredibile! Posso solo attribuire il premio in 2 ore, ma è tutto tuo. Ho passato un sacco di tempo su questo, e ad essere onesti, non sono l'unico. La logica è semplicemente bellissima. Sei fantastico! Per favore riferisci questo post a questa [domanda] (http://stackoverflow.com/questions/13227658/doctrine-does-not-update-a-simple-array-type-field/13232142#13232142). Risulta essere un problema molto simile. Molto bene! – Mick
Ho cambiato un po 'il setMethod(), ora funziona se cambi il cursore dell'array. –