2012-07-21 30 views
0

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做一個數學運算+或 - 兩個字段: 我實際上想要用'abonos'表達式替換'monto'字段,我該怎麼做?

可以說是這樣的:

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

我也沃爾德喜歡addCondition其中這些領域都是平等的。我能做到這一點?

東西艾克:

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

回答

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')); 
}); 
1

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

那麼你可以:

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

+0

它不工作,這是可以的字段,但不是表達式,這是選擇: pdo_error:SQLSTATE [42S22]:未找到列:1054'字段列表'中的未知列'abonos' 模式:select params:Array() 查詢:select(從'alumno'中選擇'name',其中'cargo'.'alumno_id' ='alumno'.'id')'alumno',(從'plan'中選擇'name' ''plan'.'plan_id' ='plan'.'id')'plan','fecha','fechaVencimiento','name','monto','cancelado','fechaCreacion',(select sum('monto ''從'abono'從哪裏'abono'.'cargo_id' ='cargo'.'id')'abonos',monto - abonos'balance','id','fechaCancelacion' from'cargo' – mcanedo 2012-07-22 13:55:18

+0

這是因爲abonos是不是列而是計算字段。你必須在set(「..」)中設置完整查詢才能找到平衡字段。 – jancha 2012-07-22 23:25:06