※ 引述《chan15 (ChaN)》之銘言:
: 分類的 table 為 categories,結構如下
: id primary key
: name varchar
: order int
: category_id int NULL
: 如果 category_id 是 NULL 的話,就是第一層,order 同時也為 0,今天需要將雙層的目錄撈出後 output 成 JSON 格式
: {
: "Category":
: [
: {
: "first_name":"a1",
: "second_category":
: [
: "second_name":"a1-1",
: "second_name":"a1-2"
: ]
: }
: ],[
: {
: "first_name":"a2",
: "second_category":
: [
: "second_name":"a2-1",
: "second_name":"a2-2",
: "second_name":"a2-3"
: ]
: }
: ]
: }
: 我的 framework 是 Laravel,所以寫法為
: $result = [];
: $category = Category::whereNull('category_id')->with('categories);
: if (NULL !== $category) {
: foreach ($category->get() as $k => $first) {
: $result['Category'][$k]['first_name'] = $first->name;
: if (NULL !== $first->children) {
: foreach ($first->children as $j => $second) {
: $result['Category'][$k]['second_category'][$j]['second_name'] = $second->name;
: }
: }
: }
: }
: return Response::json($result);
: 不知道有沒有更精簡的做法,假設今天要取到三層,會變的很長
: $result['Category'][$k]['second_category'][$j]['third_name'][$i] = $third->name;
: ※ 編輯: chan15 來自: 1.34.249.126 (11/21 11:17)
=.= 又有一陣子沒寫 Laravel4 了,有點忘記一些規則。下面的程式是從之前寫的
Kohana 改成 Laravel4 版本的,我有做基本的測試了,你可以改成屬於你自己的規則。
### 資料表結構 ###
categores
- id
- name
- rank
- parent_id
### 程式碼 ###
class Category extends Eloquent {
protected $table = 'categores';
public function children() {
return $this->hasMany('Category', 'parent_id');
}
public static function tree() {
$root = self::where('parent_id','=',0)->orderBy('rank')->get();
return self::recurse_tree($root);
}
public static function recurse_tree($categories, $tree=array()){
foreach($categories as $key => $category) {
$tree[$key] = $category->toArray();
$children = $category->children()->orderBy('rank')->get();
if($children) {
$tree[$key]['children'] = array();
$tree[$key]['children'] = self::recurse_tree
($children, $tree[$key]['children']);
}
}
return $tree;
}
}
### 控制器 ###
class HomeController extends Controller {
public function index() {
print_r(Category::tree());
}
}
建議結構不要超過三層會比較好,不然就考慮研究 MTPP 演算法的方式
可以參考之前鄉民討論的到部分 http://goo.gl/h5d40d
另外 Eloquent 強化過會比較好用,可以參考文章 http://goo.gl/CbxVx1
--
歡迎來我的網誌看看
@ http://blog.liaosankai.com
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.126.240.101
※ 編輯: liaosankai 來自: 59.126.19.29 (01/08 10:31)