1

atk4.2.1

請求書と支払いの 2 つのモデルがあります。請求書にフィールド (式) を追加したいのですが、既に支払われた金額を計算できます (複数の部分的な支払いが含まれる可能性があります)。結合と式を追加しましたが、そうではありません仕事、その式を書く正しい方法は何ですか?

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

        $this->hasOne('Customer');
        $this->hasOne('Plan');
        $this->addField('date')->type('date');
        $this->addField('amount')->type('money');
        $this->addField('cancelled')->type('boolean')->defaultValue(false);

        $this->join('payment','id');
        $this->addExpression('amountPaid')->set('sum(payment.amount)')
       //*****above expression is not working*********//
    }
}

.

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

        $this->hasOne('Invoice');
        $this->addField('date')->type('date');
        $this->addField('concept');
        $this->addField('amount')->type('money');
    }
}

代わりに、次のような表現を使用できます。

$this->addExpression('amountPaid')->set('(SELECT sum(amount) FROM payment where invoice_id=**CURRENT ID**)');

しかし、モデルで現在のIDを取得するにはどうすればよいですか???

4

1 に答える 1

2

とった!それはどういうわけかここに文書化されました: http://agiletoolkit.org/learn/understand/model/intro

これが正しい方法です: Model_Invoice の内部:

    $this->hasMany('Payment');
    $this->addExpression('amountPaid')->set($this->refSQL('Payment')->sum('amount'));

これで、hasMany() のポルプスが何であるかを本当に理解しました

于 2012-07-21T22:22:56.907 に答える