Tôi đã giải quyết vấn đề vài tháng trước ... Tôi đang đăng câu trả lời, vì vậy điều này có thể hữu ích cho các nhà phát triển đồng nghiệp khác ... p.s. Dự án được viết bằng Yii 1.1
Đầu tiên, trong HorseController của tôi đã chỉ định biến kiểu mảng riêng tư nơi tôi sẽ giữ Pedigree:
private $horses = array();
Sau đó, tôi đã viết hàm sẽ lấy tất cả các nút (cha) từ cơ sở dữ liệu:
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;
}
Sau đó, tôi đã sửa đổi ActionView chức năng, trong đó tất cả các nút từ cơ sở dữ liệu sẽ được chuyển đến Chế độ xem
public function actionView($id)
{
$this->horses = $this->getParents($id);
$this->render('view',array(
'model'=>$this->loadModel($id),
'parents'=>$this->horses,
));
}
Và cuối cùng là một chút MÃ UGLY sẽ hiển thị phả hệ (như thế này Truy vấn phả hệ ) :)
<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>
Và thế là xong :) Hy vọng nó hữu ích ...