Yii Framework Forum: Cgridview : Afficher Une Somme De Données D'une Table Liée - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Cgridview : Afficher Une Somme De Données D'une Table Liée Rate Topic: -----

#1 User is offline   Davjack 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 17-November 11

Posted 15 August 2013 - 07:46 AM

Bonjour à tous,

Je rencontre actuellement un problème avec le widget CGridview.
Voici le diagramme simplifié de mes données :
Posted Image

En résumé, ce système permet de créer des transactions "Transaction" qui contiennent un à plusieurs éléments (par exemple, "Achats d'aliments", "Loyer", etc.) qui ont chacuns un coût.
Chaque transaction est créée par une personne "User".
Finalement, une transaction est assignée "Assignment" à une ou plusieurs personnes. L'assignement permet de définir qui à payé combien de pourcentage de la transaction.

Sur une des pages de mon application, je souhaite, sur la base du modèle "Assignment", afficher les informations suivantes :
  • Assignment->id
  • Assignment->Transaction->date
  • Assignment->User->pseudo
  • Assignment->percent
  • Assignment->Transaction->description
  • array_sum(Assignment->Transaction->Item->debit)


J'arrive à tout afficher sauf la dernière ( array_sum(Assignment->Transaction->Item->debit) ). Le but est d'afficher sur chaque ligne le coût total de la transaction (par la suite, l'idéal serait d'ailleurs d'afficher le coût total pour une personne, en multipliant la somme des "debit" par le pourcentage "percent").

Comment puis-je faire?

Voici les essais que j'ai effectué sans succès :
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',
		),
	),
));

?>


Modèle Assignment :
<?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,
		));
	}
}


Modèle Transaction :
<?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'),
		);
	}
	
	// ...

}


Un grand merci d'avance pour votre précieuse aide.
0

#2 User is offline   Co-k-ine 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 96
  • Joined: 29-March 10

Posted 04 September 2013 - 01:57 PM

Bonjour,

Lorsque j'ai eu a faire un tableau récapitulatif (avec des colones de totaux), j'ai simplement créer une méthode dans mon modèle qui me ressort le totale via une requete sql.
Ensuite j'utilisais cette méthode dans le CGridView, il existe peut-être une meilleurs méthode, mais en tout cas ça fonctionne
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users