模型:我有一个像id:name:parentId这样的表。 parentId引用 到了id。构建树的简单递归。
例如:
在我的控制器中,我现在调用数据库并传递数据 通过观点。如果我这样做,那么我会有一个功能 在我看来。我不喜欢我的观点中的功能:)。
另一种方法是以某种方式对其进行排序。但这真的会有所作为吗?
感谢任何建议。 提前谢谢。
编辑:我将数据作为对象接收。
答案 0 :(得分:2)
根据基于MVC框架的设计(胖模型,超薄控制器)的趋势,我建议使用模型来获取数据并将嵌套数据集(多维数组)传递给控制器/视图。无论层次结构有多深,它都是有限的。
由于问题有点广泛,不清楚它是什么类型的数据,无论你是一直需要整个数据还是只需要一些相对的数据块。无论哪种方式,我想你都希望保持层次结构,所以如果你不习惯迭代嵌套数组,那么总是可以选择使用(Std)对象。
答案 1 :(得分:1)
如果查看here,您会看到一个嵌套树(表)。单击To Array
按钮。您将看到如下数组:
'0' ...
'item_id' ...
'parent_id' => "none"
'depth' => "0"
'left' => "1"
'right' => "22"
'1' ...
'item_id' => "1"
'parent_id' ...
'depth' => "1"
'left' => "2"
'right' => "7"
请注意left
和right
解释here
通过这种方式,您还可以获得树的深度和部分。
答案 2 :(得分:0)
在模型中构建多维数组并将其传递给视图。
您可以使用指针进行多维数组而无需递归。
// collect tree
$res=$Conn->query('SELECT id, name, parentId FROM tree');
// if your root node has parent 0
$tree[0]->children=array();
// build into one array
// every node is found from its $tree[parentId]->children[id]
// and from $tree[id]
foreach($res as $row)
{
$tree[$row['id']]->data=$row;
if(!isset($tree[$row['id']]->children))
$tree[$row['id']]->children=array();
$tree[$row['parentId']]->children[$row['id']]=&$tree[$row['id']];
}