【发布时间】:2014-08-31 14:20:16
【问题描述】:
我正在使用LARAVEL 4 和MySQL 后端。
我有一个self-referencing 表,其中包含id, name, type 和parent 列。
这里,parent 是Id 列的foreign-key。表中数据如下:
id name type parent
1 General group NULL
2 What is..? question 1
3 aa answer 2
4 bb answer 2
5 cc answer 2
6 How is..? question 1
7 ba answer 6
8 bb answer 6
9 Where is..? question 4
10 ca answer 9
11 cb answer 9
12 Who is..? question 6
13 da answer 12
14 db answer 12
15 Specific group NULL
16 When is..? question 15
17 ea answer 16
18 eb answer 16
19 Whome is..? question 2
20 fa answer 19
21 fb answer 19
22 fc answer 19
我想要一个使用此关系数据返回 nested JSON 的函数。例如:
[{
"id" : 1,
"name" : "Geneal",
"type" : "group",
"children" : [{
"id" : 2,
"name" : "What is..?",
"type" : "question",
"children" : [{
"id" : 3,
"name" : "aa",
"type" : "answer"
},
{
"id" : 4,
"name" : "bb",
"type" : "answer"
},
{
"id" : 5,
"name" : "cc",
"type" : "answer"
}]},
{
"id" : 6,
"name" : "How is..?",
"type" : "question",
"children" : [{
"id" : 7,
"name" : "ba",
"type" : "answer"
},
{
"id" : 8,
"name" : "bb",
"type" : "answer"
}]
}]
... and so on
}]
我创建了一个名为Survey 的model,如下所示:
class Survey extends BaseModel{
protected $table = 'questions';
protected $softDelete = false;
public function parent()
{
return $this->belongsTo('Survey', 'parent');
}
public function children()
{
return $this->hasMany('Survey', 'parent');
}
}
并在controller 中调用它:
$user = Survey::all();
$parent = $user->parent()->first();
$children = $user->children()->get();
但我没有得到正确的结果,正如我在上面的JSON 中提到的那样。
print_r($parent->toJson());
仅提供具有一级层次结构的记录(即组和问题,而不是答案)。
同时
print_r($children ->toJson());
只提供问题(不提供组和答案)。
我想要整个具有 N 层级的嵌套 JSON 格式的自引用数据。
我也试过了
$user = Survey::with('parent', 'children')->get();
但发现与上面的 $parent 相同。
有没有我可以得到想要的结果?
提前谢谢..
【问题讨论】:
-
我认为 LARAVEL 是无用的框架。我在其文档本身的任何地方都找不到任何帮助。
-
我认为现在在 stackoverflow 上没有 LARAVEL 的专家
-
阅读文档laravel.com/docs/eloquent#eager-loading嵌套关系,尝试一下,如果仍然需要帮助,请回来。
-
@deczo 我已经在我的问题中提到我使用了急切加载。请参阅 $user = Survey::with('parent', 'children')->get();此语句仅检索组和问题,而不是答案。我希望它作为嵌套数组或具有 N 级的 JSON。如何实现?