Eloquent让所有孩子陷入困境

时间:2018-03-12 07:33:19

标签: php laravel eloquent

我是Laravel和Eloquent的新手,我需要从父ID中获取所有子ID。

这些是我的样本数据:

ID  Entity Name Amount  Parent ID   Data Level  Currency<br>
1   Great Grandpa_1 0   0       1       php<br>
2   Great Grandpa_2 10000   0       1       php<br>
3   Great Grandpa_3 20000   0       1       php<br>
4   Grandpa_1   5000    1       2       php<br>
5   Grandpa_2   6000    1       2       php<br>
6   Grandpa_3   7000    1       2       php<br>
7   Grandpa_4   1000    2       2       php<br>
8   Grandpa_5   2000    2       2       php<br>
9   Grandpa_6   3000    2       2       php<br>
10  Grandpa_7   0   3       2       php<br>
11  Dad_1       1500    4       3       php<br>
12  Dad_2       2500    4       3       php<br>
13  Dad_3       3500    4       3       php<br>

这是我在MySQL中的脚本:

select group_concat(lv separator ',') as children from 
(select @pv := (select group_concat(id separator ',') from 
tbljournalentry where parent_id in (@pv)) as lv from 
tbljournalentry join (select @pv := {$id})tmp where parent_id in (@pv))a;

这是我可以去的地方:

$result = DB::table('tbl_journalentry')->where('parentid', $id)->get();

我只能得到直接的孩子。我需要得到所有孩子的身份证。 我希望你能向我解释我需要做些什么。感谢。

3 个答案:

答案 0 :(得分:0)

使用pluck()

$result = DB::table('tbl_journalentry')->where('parentid', $id)->pluck('id');

答案 1 :(得分:0)

如果您需要从大颗粒到儿童的所有数据。

首先你需要找到所有祖父母的身份证。

$greatgrandpa = DB::table('tbl_journalentry')->where('parentid', 0)->pluck('id');

它将返回伟大爷爷的所有ID。现在循环遍历它以获得爷爷的所有ID。

$grandpa = DB::table('tbl_journalentry')->whereIn('parentid', $arrayofgreatgrandpaIDs)->pluck('id');

你将获得所有爷爷身份证。现在再次使用爷爷的ID找到爸爸。

$dad = DB::table('tbl_journalentry')->whereIn('parentid', $arrayofgrandpaIDs)->pluck('id');

通过这个你可以获取所有级别的孩子。

答案 2 :(得分:0)

你应该试试这个:

我认为您的模型名称为journalentry,并在journalentry模型中添加以下代码

在模型中

public function children() {
   return $this->hasMany('App\journalentry','parentid','id');
}

在控制器中

use App\journalentry;//Model name

$result = journalentry::find($id);
print_r($result->childs);
foreach ($result->childs as $data) {
   print_r("*******sub child***** <br>");
   print_r($data->childs);
}