symfony - Some methods have its returned value persisted only if other fields are changed before PreUpdate -
my budget
entity has methods executed on prepersist
, preupdate
. methods are:
/** * @return \datetime */ public function generatenextpaymentdate() { if ($this->getstartsat() !== null) { $date = new \datetime($this->getstartsat()->format('y-m-d')); return $date->add(new \dateinterval('p' . $this->getcheckfor() . 'd')); } } /** * @return decimal */ public function calculatetotalbudgetprice() { $totalbudgetprice = 0; foreach ($this->getitems() $item) { $totalbudgetprice += $item->getprice(); } return $totalbudgetprice; } /** * @return decimal */ public function calculateinstallmentrateprice() { return $this->calculatetotalbudgetprice() / $this->getinstallmentrate(); } /** * @orm\prepersist * @orm\preupdate */ public function onpreevents() { $this->setnextpaymentdate($this->generatenextpaymentdate()); $this->setinstallmentrateprice($this->calculateinstallmentrateprice()); $this->settotalbudgetprice($this->calculatetotalbudgetprice()); }
the methods calculateinstallmentrateprice()
, calculatetotalbudgetprice()
uses attributes of product
entity, collection form inside of budget
.
the issue i've noticed these methods have returned value persisted database if modify 1 or more field of budget
form. if not, values these 2 methods still correct not changed in base.
i not understand why happens. have missed logic?
if @ documentation preupdate
event see info:
changes fields of passed entities not recognized flush operation anymore, use computed change-set passed event modify primitive field values
so, need use setnewvalue()
function modify entity, doing like:
$eventargs->setnewvalue('nextpaymentdate', $this->generatenextpaymentdate());
Comments
Post a Comment