递归函数不返回Laravel 5中的所有子项

时间:2016-06-17 06:47:17

标签: php laravel-5

我有一个Mysql表

My table screenshot

这是我的模特

namespace App;
use Illuminate\Database\Eloquent\Model;
class Categories extends Model {
    protected $table = 'category';
    protected $fillable = ['category_name', 'parent_id', 'category_level', 'last_level', 'description', 'category_image'];
    protected $guarded = ['id'];
    public function parent()
    {
        return $this->belongsTo('App\Categories', 'parent_id');
    }
    public function children() {
        return $this->hasMany('App\Categories','parent_id');
    }
}

这是我的控制器方法

public function create() {
    $parentCategory = Categories::all(); 
    return view('admin.add_category')->with('parentCategory', $parentCategory);
}

我想得到这个结果

Result screenshot

怎么可能?

修改

这是我的观点:

<select name="category_id" id="p_category_id" class="form-control">
    <option selected="selected" value="">Select Cateory</option>
    <option selected="" value="">Category</option>
    @foreach ($parentCategory as $category)  
        @foreach ($category->children as $child)
            <option value="{{ $category->id }}" placeholder="choose parent category">{{ $child->category_name }}</option>
        @endforeach                                        
     @endforeach
</select>

我想要这个结果:

Category
Bangladesg
----Dhaka
---------Mirpur
---------------Senpara
---------Mohammadpur
----Rangpur

1 个答案:

答案 0 :(得分:0)

您必须创建自定义方法才能实现此目的。因为你要做的是列出所有孩子和孩子的孩子等等。这不适用于1个foreach循环(或者,不是像你现在这样的foreach循环)。你可以在foreach循环中硬化foreach循环,但那是丑陋的代码然后你硬编码最高级别的类别。

您必须创建的方法应该是一种自引用方法,这样您就可以拥有任意数量的子类别。

也许您应该尝试一些为您完成工作并且易于实施的软件包:

https://github.com/gazsp/baum

https://github.com/lazychaser/laravel-nestedset