Laravel: отображение данных в выпадающем списке из базы данных

#laravel

#laravel

Вопрос:

Привет, ребята, у меня проблема в моей неопределенной переменной кода: reports_categories. Я пытаюсь создать выпадающий список с названием категорий, которые они есть в моей базе данных. Вот что я сделал:

 {!! Form::open(array('route' => 'reports.create','role' => 'form', 'enctype' => 'multipart/form-data')) !!}
                        {{csrf_field()}} 
                        {{method_field('PUT')}}

                        <div class="col-md-4 col-sm-2 pull-right"style="margin-top: 50px">
                            <div class="select-style input-round med-input shop-shorting-full">
                                <select name="category_id" id="" class="form-control">
                                    <option value="">Select Category</option>
                                    @foreach($reports_categories as $category)
                                        <option
                                             value="{{$category->id}}"
                                             @if($category->id === $reports->category_id)
                                                selected
                                             @endif
                                             >
                                             {{$category->name}}
                                        </option>
                                    @endforeach
                                </select>
                            </div>
                        </div>
                {!! Form::close() !!}
  

И вот мой ReportsController:

    public function index(){
   //Show all created reports
   $reports = Reports::orderBy('created_at', 'desc')->paginate(15);
   return view('reports.index', ['reports'=>compact('reports')])->with(['reports', $reports]);
    }  
                                                                                                                                         
    public function create()
    {
        $reports = 'reports';
        return view('reports.create',['reports'=>$reports]);
    } 
                                                                                                                                         
    public function store(Request $request)
    {
        //Validate fields
        $this->validate($request, [
            'title' => 'required',
            'description' => 'required',
            'address' => 'required'
        ]);

        //Create Report
        $reports = new Reports;
        $reports->title = $request->input('title');
        $reports->description = $request->input('description');
        $reports->address = $request->input('address');
        $reports->reports_categories_id = auth()-            
                >reports_categories()->id;
        $reports->user_id = auth()->user()->id;
        $reports->save();

        return redirect('/reports')->with('success', 'ReportCreated');
    }
                                                                                                                                       
    public function show($id)
    {
        $reports = Reports::find($id);
        $reports_categories = DB::table('reports_categories')->where('reports_categories_id', $id)->get();
        return view('reports.show', ['report'=>$reports, 'reports_categories'=>$reports_categories]);   
    }
  

Пожалуйста, если вы знаете, в чем проблема, или у вас есть какие-либо предложения, дайте мне знать.
Если вам нужна более подробная информация, сообщите мне, и я предоставлю дополнительную информацию.

Комментарии:

1. Пожалуйста, исправьте return view (‘reports.show’, [‘report’=>$reports, ‘reports_categories’ =>$categories]); это должно быть ‘reports_categories’ =>$reports_categories

2. Какой у вас файл с именем блейда?

3. Имя блейда create.blade.php

4. @mightyteja я это исправил, но все же

Ответ №1:

Если это связано с вашей функцией ‘show’, то вы передаете переменную с именем $categories вместо $reports_categories, которую вы использовали для запроса к БД здесь:

  public function show($id)
{
    $reports = Reports::find($id);
    $reports_categories = DB::table('reports_categories')->where('reports_categories_id', $id)->get();
    return view('reports.show', ['report'=>$reports, 'reports_categories'=>$categories]);   
}
  

Измените переменную, которую вы возвращаете в представление, на $reports_categories .

Если эта форма находится в вашем представлении функции «создать», то вы вообще не передаете ее на эту страницу. Если вы используете форму создания, которая требует этого, может быть, в этом проблема? Трудно понять, не зная, на какой странице находится эта форма.

Комментарии:

1. Да, я изменил $categories на $ reports_categories, но я все равно получаю ту же ошибку. Не могли бы вы еще раз объяснить вторую часть своего ответа?