如何做数学运算与敏捷工具包模式字段或表达式(How to do math operations wi

2019-09-20 00:17发布

atk4.2.1

我有这样的模式:

class Model_Cargo extends Model_Table {
public $table='cargo';
function init(){
    parent::init();

    $this->hasOne('Alumno');
    $this->hasOne('Plan');

    $this->addField('fecha')->type('date');
    $this->addField('fechaCreacion')->type('date');
    $this->addField('fechaVencimiento')->type('date');
    $this->addField('name');
    $this->addField('monto')->type('money');
    $this->addField('cancelado')->type('boolean')->defaultValue(false);

    $this->hasMany('Abono');
    $this->addExpression('abonos')->set($this->refSQL('Abono')->sum('monto'));
   }
}

我wanto做一个数学运算+或 - 有两个字段:其实我是想substracr场“蒙托”与表达“abonos”我该怎么办呢?

可以说,这样的事情:

$this->addExpression('balance')->set('monto'-'abonos');
//this does not work

我也沃尔德喜欢addCondition其中这些领域都是平等的。我能做到这一点?

东西艾克:

$this->addCondition('monto','abonos');
//this does not work

Answer 1:

我创建说明如何在表达式中使用计算区域的例子:

http://agiletoolkit.org/codepad/model/def

对于你的问题,你需要这样的:

$this->addExpression('balance')->set(function($m,$q){
    return $q->expr('[f1] - [f2]')
        ->setCustom('f1',$m->getElement('monto'))
        ->setCustom('f2',$m->getElement('abonos'));
});


Answer 2:

$this->addExpression("balance")->set("monto - abonos"); 这就是它 - SQL表达式。

那么你也能:

$this->addCondition("balance", ">", 0); 或任何你需要的。



文章来源: How to do math operations with model fields or expressions in Agile Toolkit