MANY_MANY Join über 5 Tabellen

Hi,

ich stehe vor einem schwierigen Problem:

Ich habe 5 Tabellen. In einer Zwischentabelle befindet sich eine ID mit der ich einen zweiten Join ausführen müsste, jedoch weiß ich nicht wie ich daran komme.

Ich hoffe, dass ihr mir bei diesem Problem weiterhelfen könnt!

Tabelle1 - Autohersteller

  • ID

  • Name

Tabelle 2 - Marke

  • ID

  • Name

Tabelle 3 - AutoherstellerMarke

  • ID

  • AutoherstellerID

  • MarkeID

  • LandID (enthält ID aus Tabelle 4)

Tabelle 4 - Laender

  • ID

  • Name

Ich weiß nicht wie ich die LandID in einem Join erhalte und damit den Namen aus Tabelle 4 beziehe.

Mein Join sieht zur Zeit wie folgt aus


$oAutohersteller = Autohersteller::model()->with('marke')->findByPk($id);

Ich bräuchte aber so etwas in der Art


$oAutohersteller = Autohersteller::model()->with('marke, laender')->findByPk($id);

// Bedingung: AutoherstellerMarke.LandID = laender.ID

Die Daten würde ich dann folgendermaßen ausgeben


<?php foreach($oAutohersteller->marke as $oHersteller): ?>

	<?php echo $oHersteller->name; ?>

	<?php echo $Autohersteller->name; ?>

	<?php echo $xxxxxxxx ?>    <<<< land.name <img src='http://www.yiiframework.com/forum/public/style_emoticons/default/huh.gif' class='bbc_emoticon' alt='???' />???

<?php endforeach; ?>

Danke für eure Hilfe!

Richtig wäre doch Autohersteller HAS_MANY AutoherstellerMarke? Dann wäre auch alles viel einfacher.


$hersteller = Autohersteller::model()->with('marken')->findByPk($id, '`marken`.`landID` = 1');

Also, in Autohersteller:

marken = HAS_MANY AutoherstellerMarke

In AutoherstellerMarke:

marke = BELONGS_TO Marke

land = BELONGS_TO Land


foreach ($hersteller->marken as $marke)

{

   echo $hersteller->name;

   echo $marke->marke->name;

   echo $marke->land->name;

}

Für AutoherstellerMarke kannst du dann noch einen defaultScope definieren damit marke und land nicht lazy-loaded werden:




public function defaultScope()

{

   return array(

      'with' => array('marke', 'land'),

   );

}

perfekt!

Es hat geklappt!

Vielen Dank Y!!!!!!