如何在不同的下拉列表中显示所有菜单和子菜单项


how to display all menu and submenu item in a different drop down list?

我不知道这是怎么回事!这个代码不能正常工作。我没有得到错误。它显示菜单正确,但不显示任何子菜单下的特定菜单。下面是我的代码:

##Table: menus##
    id  name                    parent_id   
    1   Dhaka                   0   
    2   Chitagong               0   
    3   Chittagong University   2   
    4   Dhaka University        1   
    5   Barisal                 0   
    6   Chittagong University   5

##route:##
Route::get('/', 'MenuController@index');
Route::get('/sub','MenuController@subMenu'); 

##Model:##

    <?php
    namespace App;
    use Illuminate'Database'Eloquent'Model;
    class Menu extends Model
    {
        protected $fillable = [
            'id','name','parent_id'
        ];
    }

    ##Controller :##
       <?php
    namespace App'Http'Controllers;
    use Illuminate'Http'Request;
    use Illuminate'Support'Facades'Input;
    use App'Http'Requests;
    use App'Menu;
    class MenuController extends Controller
    {
        public function index()
        {
            $menuItem = Menu::where('parent_id', '=',0)->get();
            return view('index', compact('menuItem'));
        }
        public function subMenu()
        {
            $parent = Input::get('parentID');
            $sub_menu= Menu::where('parent_id','=',$parent)
                       ->select('id','name')
                       ->get();
                       return response()->json($sub_menu);
                   }
    }

    ##View:##
        <!--/.start add menu section-->
         <div class="row">
             <div class="col-xs-12">
             <div class="panel panel-default">
              <div class="panel-heading">
                <strong>Menu </strong>
              </div>
              <div class="panel-body">
                <div class="form-horizontal">
                  <div class="row">
                    <div class="col-xs-8">
                      {{ Form::open(['class' => 'form-horizontal', 'role' => 'form']) }}
                      <div class="form-group">
                      <label align="right" for="name" class="control-label col-xs-2">Menu :</label>
                      <select class="col-md-5 input-sm" name="menu" id="menu">
                            @foreach ($menuItem as $menu)
                               <option value="{{ $menu->id }}" placeholder="choose menu">{{ $menu->name }}</option>
                            @endforeach
                     </select>
                    </div>
                    <div class="form-group">
                        <label align="right" for="child_id" class="control-label col-xs-2">Sub Menu :</label>
                          <select class="col-md-5 input-sm" name="child_id" id="child_id" >
                           </select>
                     </div>
                    </div>
                  </div>
                </div>
              </div>
               <div class="panel-footer">
              <div class="row">
                <div class="col-md-8">
                  <div class="row">
                    <div class="col-md-offset-2 col-md-6">
                       {!! Form::submit('Save', ['class' => 'btn btn-primary add-submenu']) !!}
                    </div>
                  </div>
                </div>
              </div>
              </div>
            </div>

      {{ Form::close() }}
            </div>
         </div>
    javascript:
    -------------
 <script type="text/javascript">
   $.ajaxSetup({
   headers: {
    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
   }
});
 $(document).ready(function(){
     $('#menu').on('change',function(e){
        console.log(e);
        var parentID= e.target.value;
          $.getJSON('/sub?parentID=' + parentID, function(data){
          console.log(data);
          $('#child_id').empty();
           $.each(data,function(index, child){
               $('#child_id').append('<option value="'+child.id+'">'+child.name+'</option>');
           });
        }); 
      });
 });
 </script>

这段代码的问题是什么?

尝试将id添加为关系中的第三个参数,

public function parent()
{
    return $this->belongsTo('App'Menu', 'parent_id', 'id');
}
public function children()
{
    return $this->hasMany('App'Menu', 'parent_id', 'id');
}

这是我的js文件中一个简单的缺失。

你的代码中有很多错误。你只是复制粘贴忘了改变这些值。
为此,我使用了一个单独的控制器和javascript。
In my VIEW

<div class="form-group">
   <label align="right" for="name" class="control-label col-xs-2">Course :</label>
      <select class="col-md-5 input-sm" name="name" id="name">
        @foreach ($menuItem as $menu)
           <option value="{{ $menu->id }}" placeholder="choose menu">{{ $menu->name }}</option>
        @endforeach
      </select>
 </div>

获取子菜单项,我使用Javascript

<script type="text/javascript">
$.ajaxSetup({
   headers: {
    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
   }
});
 $(document).ready(function(){
     $('#name').on('change',function(e){
        console.log(e);
        var parentID= e.target.value;
          $.getJSON('/your current url/sub?parentID=' + parentID, function(data){
          console.log(data);
          $('#child_id').empty();
           $.each(data,function(index, child){
               $('#child_id').append('<option value="'+child.id+'">'+child.name+'</option>');
           });
        }); 
      });
 });

route.php中有

Route::get('your current url/sub','MyJSController@loadchild');

在MyJSController -> loadchild函数中有

public function loadchild()
{
 $parent = Input::get('parentID');
 $sub_menu= DB::table('menus')
                   ->where('parent_id','=',$parent)
                   ->select('id','name')
                   ->get();
return response()->json($sub_menu);
}

VIEW中的子菜单下拉应该是这样的

<div class="form-group">
    <label align="right" for="child_id" class="control-label col-xs-2">Sub Menu :</label>
      <select class="col-md-5 input-sm" name="child_id" id="child_id" >
       </select>
 </div>
public function create()
{
   $menuItem = DB::table('menus')
                    ->where('parent_id','=',0)
                    ->get();
   return view('menu.createmenu', compact('menuItem'));
}

确保导入了
控制器中的use Illuminate'Support'Facades'Input; use DB;
另外一件事
不要使用{!! Form::close() !!},因为存在安全漏洞。使用{{ Form::close() }}