Eine View, Daten Aus 2 Models

Hey :)

Ich bin gerade dabei mit Yii eine kleine Anwendung zu erstellen.

Habe eine MySQL Datenbank dranhängen die 2 Tabellen hat: Kunde und Aufträge.

Beide sind verknüpft und im jeweiligen model ist bereits die relation eingefügt und es funktioniert auch.

Kann also in einer View den Kunden mit EINEM Auftrag anzeigen.


<?php $this->widget('zii.widgets.CDetailView', array(

	'data'=>$model,

	'attributes'=>array(

		'ID',

		'Name',

		'Vorname',

		'Geburtsdatum',


		...

	),

)); ?>




<?php $this->widget('zii.widgets.CDetailView', array(

	'data'=>$model,

	'attributes'=>array(

	'iD.AuftragID',

	'iD.AuftragDatum',

        ...

	),

)); ?>



Da ich nun aber nur einen Auftrag angezeigt bekomme und ich sowieso gerne diese Button für Anzeigen, Bearbeiten und Löschen haben möchte, wollt ich CGridView nehmen.




$dataProvider2=new CActiveDataProvider('Auftrag'); //ja, hat in der view eigentlich nichts zu suchen <img src='http://www.yiiframework.com/forum/public/style_emoticons/default/wink.gif' class='bbc_emoticon' alt=';)' />


<?php $this->widget('zii.widgets.grid.CGridView', array(

	'id'=>'Auftrag-grid',

	'dataProvider'=>$dataProvider2,

	'columns'=>array(

		'AuftragID',

		'AuftragDatum',

	         ...

		         array(

			'class'=>'CButtonColumn',

		),

	),

)); ?>



Leider komm ich mit der Logik noch nicht ganz klar wie ich das am besten angehe. Es sollten halt alle Aufträge von dem einem Kunden angezeigt werden. (Momentan werden alle angezeigt was auch klar ist bei dem Code). Quasi muss eine Suchanfrage an die Datenbank gehen, damit die ganzen Aufträge zu der ID gefunden und angezeigt werden (?)

Könnt Ihr mir da nen Tipp geben ? :)

Naja wie immer giebt es viele wege nach Rom ^^.

Also erst mal ich weiß nicht wie du die Relation gemacht hast aber so wie du es schielderst sollte es ein "HAS_MANY" sein.

So du kannst ja in deinem CActiveDataProvider ein Criteria angeben.

Das würde dann so aus sehen.




$dataProvider2=new CActiveDataProvider('Auftrag',array(

    'criteria'=>array(

        'condition'=>'AuftragID=1',

    ),

    'pagination'=>array(

        'pageSize'=>20,

    ),

));



2 Beispiel:







$criteria = new CDbCriteria();

$criteria->condition = 'AuftragID=1';

 

$dataProvider2=new CActiveDataProvider('Auftrag',array(

    'criteria'=>$criteria,,

    'pagination'=>array(

        'pageSize'=>20,

    ),

));



Vielen Dank :) Jetzt muss ich nur noch hinbekommen das er die KundenID selber findet und das nicht immer hardcoded in condition steht.

EDIT: geschafft :)

Was mir jetzt noch aufgefallen ist, die Buttons in dem GridView, verweisen auf Patient, möchste die aber auf Untersuchung verweisen lassen.

dein ActiveRecord Customer bekommt eine Relation orders




public funtion relations()

{

  return array(

    'orders' => array(self::HAS_MANY, 'ORDER', 'customerId')

  );

}



und dein CGridView in customer/view bekommt einen CArrayDataProvider




'dataProvider' => new CArrayDataProvider($model->orders)