atk4.2.1
У меня есть две модели Invoice and Payment, я хочу добавить поле (выражение) в счет-фактуру, я могу рассчитать уже оплаченную сумму (у нее может быть несколько частичных платежей), я добавил соединение и выражение, но они не работа, каков правильный способ написать это выражение?
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**)');
Но как мне получить идентификатор CURRENT в модели ???
Понял! Это было как-то документировано здесь: http://agiletoolkit.org/learn/understand/model/intro
Это правильный способ сделать это: Inside Model_Invoice:
$this->hasMany('Payment'); $this->addExpression('amountPaid')->set($this->refSQL('Payment')->sum('amount'));
Теперь я действительно понял, что такое porpuse of hasMany ()