我试图从Laravel的数据库中获取所有父数据和子数据。在父级中也将嵌套父级和子级。它就像一种多层次的东西。我面临的问题是使用循环获取所有这些信息。以下是我的代码。
$totalchild = self::getParentChildren($parent->id);
public function getParentChildren($parent) {
$totalChild = array();
$child = Permission::where('status', 1)->where('parentid', '=', $parent)->pluck('permissionid')->toArray();
$totalChild = $child;
foreach($child as $childs){
$innerChild[] = self::getChildren($childs);
$totalChild = array_push($totalChild, $innerChild);
}
return $totalChild;
}
我得到的错误是" array_push()期望参数1是数组,给定整数"。我不知道那里出了什么问题。基本上我试图在这一个父ID下获取所有父母ID和子ID。谢谢!
编辑:数据库示例如下。
id name parentid
1 master 0
2 parent A 1
3 parent B 1
4 child A 2
5 child B 2
6 child C 3
7 child A_A 4
8 child A_B 4
所以我想说我想让所有父母和孩子都在这个主父母身份1下。
代码更新: 我已经找到了另一个,但我不知道为什么它只返回第一层。它并没有让我所有的父母和孩子都归还我。
public function getChildren($parent, $tree_string=array()) {
$tree = array();
$tree = Permission::where('status', 1)->where('parentid', $parent)->pluck('permissionid')->toArray();
if(count($tree)>0 && is_array($tree)){
$tree_string=array_merge($tree_string,$tree);
}
foreach ($tree as $key => $value) {
self::getChildren($value, $tree_string);
}
return $tree_string;
}
$totalchild = self::getChildren($parent->id); // returns me the first layer only
答案 0 :(得分:2)
实际上,您可以定义父子关系n Eloquent
模型。
// app/Category.php
class Category extends Model
{
...
// Define Eloquent parent child relationship
public function parent() {
return $this->belongsTo(self::class, 'parent_id');
}
// for first level child this will works enough
public function children() {
return $this->hasMany(self::class, 'parent_id');
}
// and here is the trick for nestable child.
public static function nestable($categories) {
foreach ($categories as $category) {
if (!$category->children->isEmpty()) {
$category->children = self::nestable($category->children);
}
}
return $categories;
}
...
}
使用示例:
// Get all parent top level category
$categories = Category::where('parent_id', 0);
// Get nestable data
$nestable = Category::nestable($categories);
希望它有所帮助。
答案 1 :(得分:0)
通过修改功能来解决问题...希望它对其他人有用。
Joi.Object