Hi everyone,
I curently have a problem with the CGridview widget.
Here is a simplified diagram of my data
In summary, I can create transactions "Transaction" that contain one or several items (eg, "Food", "Rental", etc.) that each have a cost.
Each transaction are created by one person "User".
Finaly, a transaction is assigned "Assignment" to one or several users. The assignment defines who paid the how much percentage of the transaction.
On one of the pages of my application based on the model "Assignment", I want to display the following information:
-
Assignment->id
-
Assignment->Transaction->date
-
Assignment->User->pseudo
-
Assignment->percent
-
Assignment->Transaction->description
-
array_sum(Assignment->Transaction->Item->debit)
I can display everything except the last one ( array_sum(Assignment->Transaction->Item->debit) ). The goal is to display on each line the total cost of the transaction.
How can I do?
Here are the tests I’ve done without success:
Controller:
<?php
class NameController extends GxController {
// ...
public function actionCGridview() {
$model = new Assignment('search');
$model->unsetAttributes();
if (isset($_GET['Assignment']))
$model->setAttributes($_GET['Assignment']);
$this->render('test', array(
'model' => $model,
));
}
}
View :
<?php
// ...
$this->widget('zii.widgets.grid.CGridView', array(
'id' => 'transaction-grid',
'dataProvider' => $model->search(),
'filter' => $model,
'columns' => array(
'id',
array(
'name'=>'transaction_id',
'value'=>'GxHtml::valueEx($data->Transaction)',
'filter'=>GxHtml::listDataEx(Transaction::model()->findAllAttributes(null, true)),
),
array(
'name'=>'user_id',
'value'=>'GxHtml::valueEx($data->User)',
'filter'=>GxHtml::listDataEx(User::model()->findAllAttributes(null, true)),
),
'percent',
array(
'name' => 'Transaction',
'header'=>'Description',
'value' => '(($data->Transaction)?$data->Transaction->description:"")',
),
array(
'name' => 'Transaction.Item.debit',
'header'=>'Sum',
'value' => '(($data->Transaction->Item)?array_sum($data->Transaction->Item->debit):0)',
),
array(
'class' => 'CButtonColumn',
),
),
));
?>
Assignment model :
<?php
class Assignment extends GxActiveRecord {
// ...
public function relations() {
return array(
'User' => array(self::BELONGS_TO, 'User', 'user_id'),
'Transaction' => array(self::BELONGS_TO, 'Transaction', 'transaction_id'),
);
}
public function search() {
$criteria = new CDbCriteria;
$criteria->compare('id', $this->id);
$criteria->compare('transaction_id', $this->transaction_id);
$criteria->compare('user_id', $this->user_id);
$criteria->compare('percent', $this->percent);
$criteria->compare('transacted', $this->transacted);
$criteria->compare('Transaction.description', $this->transaction_id);
$criteria->compare('Transaction.Item.debit', $this->Transaction->Item->debit);
return new CActiveDataProvider($this, array(
'criteria' => $criteria,
));
}
}
Transaction model :
<?php
class Transaction extends GxActiveRecord {
// ...
public static function representingColumn() {
return 'date';
}
public function relations() {
return array(
'Assignment' => array(self::HAS_MANY, 'Assignment', 'transaction_id'),
'Item' => array(self::HAS_MANY, 'Item', 'transaction_id'),
'user' => array(self::BELONGS_TO, 'User', 'user_id'),
);
}
// ...
}
A big thank you in advance for your help.