Create nested category lists in Laravel 5

I am new to Laravel and trying to create a tree structure of categories for my application. This is the code that I have used so far, but still can not achieve what I want. My controller:

public function index()
{
    $categories = Category::with('children')->get();

    return view('backend.categories.index')->with('categories', $categories);
}

My model category:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    protected $guarded = ['id'];

    public function parent()
    {
        return $this->belongsTo('App\Category', 'parent_id');
    }

    public function children()
    {
        return $this->hasMany('App\Category', 'parent_id');
    }
}

My opinion:

<table class="table table-bordered table-hover">
                <thead>
                    <tr>
                        <th>Name</th>
                        <th>Description</th>
                        <th>Slug</th>
                        <th>Action</th>
                    </tr>
                </thead>
                <tbody>
                @foreach ($categories as $category)
                    {{--@foreach ($category->children as $children)--}}
                    <tr>
                        <td>{{ $category->name }}</td>
                        <td>{{ $category->description }}</td>
                        <td>{{ $category->slug }}</td>
                        <td><a class="edit" href="{!! action('Admin\CategoriesController@edit', $category->id) !!}" title="Edit"><i class="fa fa-pencil-square-o"></a></i> <a class="delete" href="{!! action('Admin\CategoriesController@destroy', $category->id) !!}" title="Are you sure you want to delete?"><i class="fa fa-trash-o"></i></a></td>
                        @foreach ($category->children as $children)
                            <tr>
                                <td>{{ $children->name }}</td>
                                <td>{{ $children->description }}</td>
                                <td>{{ $children->slug }}</td>
                                <td></td>
                            </tr>
                        @endforeach
                    </tr>
                </tbody>
                    {{--@endforeach--}}
                @endforeach
            </table>

I am trying to create a structure as shown below:

  • fashionable accessories
    • Bags
    • Canvases
  • Mobile phones
    • Tablets
    • Smartphones

EDIT There is my database structure:

+-------------+------------------+------+-----+---------------------+----------------+
| Field       | Type             | Null | Key | Default             | Extra          |
+-------------+------------------+------+-----+---------------------+----------------+
| id          | int(10) unsigned | NO   | PRI | NULL                | auto_increment |
| name        | varchar(255)     | NO   |     | NULL                |                |
| slug        | varchar(255)     | NO   |     | NULL                |                |
| parent_id   | int(11)          | YES  |     | NULL                |                |
| description | text             | NO   |     | NULL                |                |
| created_at  | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
| updated_at  | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
+-------------+------------------+------+-----+---------------------+----------------+
+4
source share
2 answers

( ), . ( ). , , parent_id - null.

$categories = Category::whereNull('parent_id')->with('children')->get();
+1

, inorder :

public function children()
    {
        return $this->hasMany('App\Children', 'parent_id');
    }

:

class Category extends Model
{
    protected $guarded = ['id'];
    protected $fillable = array('name','description','slug','created_at','updated_at');

    public function children()
    {
        return $this->hasMany('App\Children', 'parent_id');
    }
}

:

class Children extends Model {
     protected $table = 'children';
     protected $fillable = array('name','description','parent_id','created_at','updated_at');
}

:

$categories = Category::with(['children'])->get();

- <i class="fa fa-pencil-square-o"></i></a>

:

@foreach ($categories as $category)              
       <ul>
           <li>{{ $category->name }}</li>
           <li>{{ $category->description }}</li>
           <li>{{ $category->slug }}</li>
           <li><a class="edit" href="{!! action('Admin\CategoriesController@edit', $category->id) !!}" title="Edit"><i class="fa fa-pencil-square-o"></i></a> <a class="delete" href="{!! action('Admin\CategoriesController@destroy', $category->id) !!}" title="Are you sure you want to delete?"><i class="fa fa-trash-o"></i></a></li>


               @foreach ($category->children as $children)
                  <ul>
                    <li>{{ $children->name }}</li>
                    <li>{{ $children->description }}</li>
                    <li>{{ $children->slug }}</li>
                    <li></li>
                  </ul>
               @endforeach

       </ul>
@endforeach
0

All Articles