2017-02-16 25 views
0

我试图从$形式 - 创建多级分类>多选()。
下面是我的表结构。多级分类与单个表

| id | parent | name | 
|----|--------|---------| 
| 10 |  0 | 'menu1' | 
| 12 |  10 | 'menu2' | 
| 13 |  10 | 'menu3' | 
| 14 |  0 | 'menu4' | 

结果是

+----+---------+ 
| id | name | 
+----+---------+ 
| 10 | 'menu1' | 
| 12 | 'menu2' | 
| 13 | 'menu3' | 
| 14 | 'menu4' | 
+----+---------+ 


的ID显示出对在选取元件显示值和名称。

<select> 
    <option value='10'>menu1</option> 
    <option value='12'>menu2</option> 
    <option value='13'>menu3</option> 
    <option value='14'>menu4</option> 
</select> 


没有表现出层次。我想下面显示。

<select> 
     <option value='10'>menu1</option> 
     <option value='12'>menu1 -> menu2</option> 
     <option value='13'>menu1 -> menu3</option> 
     <option value='14'>menu4</option> 
    </select> 

我应该怎么办?
我想操纵$ form_multiselect()的结构。

+0

您将不得不为此创建自己的自定义助手。 –

+0

是的,如果可能的话。 –

+0

数据库中的表是什么? –

回答

1

我假设你在上面所列的表是由你...如果这是你如何得到它尝试(你没有发布,所以你的表名”得到了它的格式的数据库将不得不这样做你自己):

$result = $this->db->select('CASE WHEN b.name IS NOT NULL THEN CONCAT(a.name, ,\' -> \' b.name) ELSE a.name END AS option') 
    ->from('yourtable a') 
    ->join('yourtable b', 'a.parent = b.id', 'left') 
    ->get()->result(); 

如果您的问题有误导我,我很抱歉......没有头绪......

+0

我使用activerecord来获取数据 –

+1

这不应该在数据库层完成。如果叶子也会有另一片叶子。你能想象有多大的这个查询与10级邻接关系?在大多数情况下,获得所有行,然后生成'foreach'并将它们分组为数组,看起来像'$ menu = ['parent'=>'menu1','child'=> ['menu2','menu3', '等。']]'。这是最简单的方法,另一种方法是在同一时间使用树更聪明,但更困难的方式。请看看这个博客文章http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ – VaL

+1

在MySQL中,当然。我一直使用的SQL Server,只是用递归cte来构建它。无论如何...我提供了一个解决方案,随时提供您自己的 –