【发布时间】:2018-04-18 15:16:04
【问题描述】:
与this issue 相关,使用onBeforeWrite 方法扩展的DataObject 不会在DB 上写入特定的属性值。详细:
数据对象:
[...]
/**
* Classe Prodotto
*/
class Prodotto extends DataObject
{
// Dichiarazione Proprietà
private static $db = [
[...]
'PrezzoIva' => 'Currency',
[...]
onBeforeWrite方法:
/**
* Metodo gestione azioni salvataggio
* Calcolo automatico prezzo lordo e scontato
* Setter
* @return void
*/
public function onBeforeWrite()
{
// Controllo Record
if (!$this->isInDb()) {
$this->setPrezzoIva();
}
if ((!isset($this->record['PrezzoIva'])) || ($this->record['PrezzoIva'] == 0)) {
$this->setPrezzoIva();
}
parent::onBeforeWrite();
}
上面调用的方法:
/**
* Metodo calcolo prezzo lordo IVA
* Setter
* @return void
*/
public function setPrezzoIva()
{
// Controllo IVA
if ((isset($this->PrezzoIva)) && ($this->PrezzoIva == 0)) {
$prezzoIva = ($this->PrezzoUnitario * $this->Iva) + $this->PrezzoUnitario;
// Salvataggio IVA
$this->PrezzoIva = $prezzoIva;
}
}
没有抛出异常。基本上,无论是在第一次write() 还是在其他保存中,PrezzoIva 都没有更新(它保持默认值)。
经过几次DataObject 编辑后,这里是我的数据库的摘录:
目前,我不知道是什么原因造成的。任何形式的帮助将不胜感激。
提前谢谢大家。
【问题讨论】:
-
你不能把它简化为
if (!$this->PrezzoIva) { $this->PrezzoIva = {your value}; } return parent::onBeforeWrite();吗?你的情况可能有点过分了 -
嗨@robert,我尝试了你的建议,结果相同。似乎该特定属性有问题。例如,我尝试与同一
DataObject中的其他人一起尝试,并且它们已正确初始化。以及从关联字段中删除setDisabled(true),或更改数据类型,但没有。即使是直接分配也不起作用(例如$this->PrezzoIva = 10;)
标签: php silverstripe silverstripe-4