Stworzyłem więc w pliku backend/modules/zamowienie/actions/actions.class.php metodę executeUpdate() i dodałem kod, który ma to zrobić, tzn. zmodyfikować produkty powiązane z edytowanym właśnie zamówieniem.
Problem polega na tym, że gdy ta metoda się wykonuje to statusy produktów co prawda się zmieniają, ale jednocześnie są kasowane relacje zamowienie_produkt z bazy. Więc kończę ze zmienonym zamówieniem (OK), zmienionymi produktami (OK), ale ze skasowanymi powiązaniami zamówienia z produktami (NIE OK). Będę wdzięczny za wskazówki co robię niewłaściwie.
Moja metoda executeUpdate() wygląda tak:
class zamowienieActions extends autoZamowienieActions { public function executeUpdate(sfWebRequest $request) { $zamowienie = $this->getRoute()->getObject(); $formularz = $request->getParameter('zamowienie'); if($formularz['zamowienie_status_id'] != $zamowienie->getZamowienieStatusId()) { # zmieniono status zamówienia if(ZamowienieStatusPeer::retrieveByPk($formularz['zamowienie_status_id'])->getSlug() == 'rozliczone') { foreach($zamowienie->getZamowienieProdukts() as $produkt) { $c = new Criteria(); $c->add(ProduktStatusPeer::SLUG, 'sprzedany'); $produkt->getProdukt()->setProduktStatus(ProduktStatusPeer::doSelectOne($c)); $produkt->getProdukt()->save(); } } } parent::executeUpdate($request); } }
Ok, rozwiązałem problem. Patrząc na jego przyczynę widzę, że po tym co napisałem nie dało mi się pomóc

Otóż wyświetlałem sobie pod formularzem edycji zamówienia partial z listą produktów. Ale nigdzie nie wyświetlałem widgetu zamowienie_produkt_list wobec czego wyglądało jakbym zawsze odznaczał wszystkie powiązania przed wysłaniem formularza. Efektem było kasowanie relacji łączących zamówienie z produktem. Pozdrawiam.