Как сделать простой динамический выпадающий список в Laravel? - PullRequest
1 голос
/ 06 апреля 2019

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

У меня есть одна таблица "Раздел" и другая "Класс". Я хочу показать название классов на странице раздела.

Разделы Миграция

Schema::create('sections', function (Blueprint $table) {
    $table->increments('id');
    $table->string('title');
    $table->integer('class_id')->unsigned();
    $table->foreign('class_id')->references('id')->on('classses');
});

Миграция классов

Schema::create('classses', function (Blueprint $table) {
    $table->increments('id');
    $table->string('title');
    $table->timestamps();
});

Честно говоря, я не знаю, должен ли я сменить контроллер или нет.

Лопасть / View

<div class="form-group">
    <label for="name">Name</label>
    <input type="text" class="form-control" name="name" id="title">
</div>
<div class="form-group">
    <label for="cid">Class</label>
    ???????????????
</div>

Индексная функция

public function index()
    {        $sections = Section::all();
            return view('sections.index', compact('sections'));

        $classs = Classs::all()->pluck(['id', 'title']);
        return view('sections.index')->with('classs', $classs); }

Ошибка: недостижимая инструкция в строке $ class & Ожидаемая строка, полученный массив в ([id, 'title])

Ответы [ 2 ]

1 голос
/ 06 апреля 2019

В вашем контроллере у вас есть функция для возврата представления.

Измените его на ->with(), чтобы вы могли получить доступ к классам в представлении:

// if the controller is not for the classes, add this up top:
use App\Classs; // include model name



$classs = Classs:all();

return view('yourView')->with('classe', $classs);

Затемпо вашему мнению, вы можете просто сделать это:

<div class="form-group">
  <label for="cid">Class</label>

  <select class="" name="cid">
    <option value="null">Class</option>
    @foreach($classs as $class)
      <option value="{{$class->id}}">{{$class->title}}</option>
    @endforeach
  </select>

</div>

Он перебирает все классы в вашей базе данных и создает для них элемент <option>.Рассматривая вашу первую миграцию, вы используете идентификатор в другой таблице, поэтому вам нужно установить его в качестве значения.


Измените свою функцию индекса следующим образом:

public function index()
{
    $sections = Section::all();
    $classs = Class::all();

    return view('sections.index')->with('sections', $sections)->with('classs', $classs);
}

Можете ли вы сказать мне, где я могу написать условия, такие как select * from class, где role_id = 2 и т. Д.

В принципе, в рамках MVC вы выполняете все свои запросыв вашем контроллере и передайте данные в представление, в котором вы отображаете данные.

Laravel имеет класс БД , который вы можете использовать для основных запросов:

select * from class where role_id = 2

Стало бы это в Laravel, используя класс DB.

DB::table('class')->where('role_id', 2)->get();

// or if it's a model:
Model::where('role_id', 2)->get();
0 голосов
/ 06 апреля 2019

Я сейчас использовал этот код на блейд-странице

              @php
                use Illuminate\Support\Facades\DB;
                $cid=DB::table('classses')->get();
                $uid=DB::table('users')->where('role_id','3')->get();
                $counter=0;
                @endphp

                <select class="" name="class_id">
                    <option value="null">Class</option>
                    @foreach($cid as $class)
                        @if($counter==0)
                        <option selected="selected" value="{{$class->id}}">{{$class->title}}</option>
                        {{$counter++}}
                    @else

                        <option value="{{$class->id}}">{{$class->title}}</option>
                    @endif
                            @endforeach
                </select>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...