Ich habe das Problem bereits vor einigen Monaten gelöst ... Ich poste eine Antwort, daher könnte dies für andere Entwicklerkollegen hilfreich sein ... p.s. Das Projekt wurde in Yii 1.1
geschriebenErstens in meinem HorseController zugewiesene private Array-Typ-Variable, in der ich Pedigree behalten werde:
private $horses = array();
Dann habe ich eine Funktion geschrieben, die alle Knoten (Eltern) aus der Datenbank erhält:
public function getParents($id)
{
global $horses;
$horses[] = Horses::model()->findByPk($id)->horse_id;
if($this->loadModel($id)->horse_sire != null && $this->loadModel($id)->horse_dam != null)
{
$this->getParents($this->loadModel($id)->horse_sire);
$this->getParents($this->loadModel($id)->horse_dam);
}
return $horses;
}
Dann habe ich ActionView modifiziert Funktion, bei der alle Knoten aus der Datenbank an View übergeben werden
public function actionView($id)
{
$this->horses = $this->getParents($id);
$this->render('view',array(
'model'=>$this->loadModel($id),
'parents'=>$this->horses,
));
}
Und schließlich ein bisschen HÄSSLICHER CODE, der den Stammbaum zeigt (wie diese Stammbaum-Abfrage ). ) :)
<table>
<?php
$reverse_multiplier = (count($parents)+1)/2;
$last_node_count = 0;
for($i = 0; $i < count($parents); $i++)
{
if($i == 0 && $last_node_count ==1)
echo "<tr>";
echo "<td rowspan='$reverse_multiplier'>";
echo "<a href=".Yii::app()->baseUrl."/index.php/horses/".Horses::model()->model()->findByPk($parents[$i])->horse_id." >";
echo Horses::model()->model()->findByPk($parents[$i])->horse_name;
echo "</a>";
echo "<br/>";
echo Horses::model()->model()->findByPk($parents[$i])->horse_yob;
echo "</td>";
if($reverse_multiplier == 1 || $reverse_multiplier == 0.5)
echo "</tr>";
if($reverse_multiplier == 0.5 && $last_node_count <= (count($parents)+1)/4)
$reverse_multiplier = (count($parents)+1)/8;
else
$reverse_multiplier = $reverse_multiplier/2;
if($last_node_count == (count($parents)+1)/4)
{
$reverse_multiplier = (count($parents)+1)/4;
$last_node_count=0;
}
if($reverse_multiplier == 0.5 || $reverse_multiplier == 1)
$last_node_count++;
}
?>
</table>
Und das war's :) Hoffe es war hilfreich...