Laravel: выберите вариант из другой таблицы - PullRequest
1 голос
/ 10 июля 2019

Я изучал laravel последние несколько дней, и мне было интересно, смогу ли я сделать foreach для тега select, который получает запись из определенной таблицы

, поэтому в моем контроллере у меня это есть, в основном этопроверка, которая возвращает запись, если она существует

public function create(Request $request)
    {
        //
        $cpf = $request->input('cpf');

        $cooperado = \DB::table('cooperados')   // query builder, busca o registro de acordo com cpf
            ->select('id', 'nome', 'cpf')
            ->where('cpf', '=', $cpf)
            ->first();

        //$cooperado = Cooperados::find($id);
        //return view('cadastro.create', compact('cooperado'));

        if(count($cooperado) == 0){

            return redirect('validar')->with('success', 'CPF incorreto ou não registrado');
            //return view('cadastro.create', compact('cooperado'));

        } else {

            //return redirect('validar')->with('success', 'CPF incorreto ou não registrado');
            return view('cadastro.create', compact('cooperado'));

        }

    }

, и вот так выглядит мое представление создания

<form action="{{ route('cadastro.store') }}" method="POST">
                    @csrf
                    <div class="row">
                        <div class="col">
                        <label for="cooperado">Cooperado</label>
                        <input type="text" class="form-control" value="{{ $cooperado->nome }}" readonly>
                        </div>
                        <div class="col">
                        <label for="cpf">CPF</label>
                        <input type="text" class="form-control" value="{{ $cooperado->cpf }}" readonly>
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="dependente">Dependente</label>
                        <input type="text" class="form-control" id="dependente" placeholder="Nome do estudante">
                    </div>
                    <div class="form-group">
                        <label for="extracurricular">Extracurricular</label>
                        <select class="form-control" id="extracurricular">
                        <option>Futsal</option>
                        <option>Volei</option>
                        <option>Futebol</option>
                        <option>Internet</option>
                        <option>Radio</option>
                        </select>
                    </div>
                    <div class="form-group">
                        <label for="dependente">Série</label>
                        <input type="text" class="form-control" id="dependente" placeholder="Exemplo: 3 Serie D">
                    </div>
                    <div class="form-group">
                        <button type="submit" class="btn btn-success">
                                Cadastrar
                        </button>
                    </div>
                    </form>

, как вы можете видеть, у меня есть тег select в моей форме, и я быЯ хотел бы использовать foreach, чтобы выбрать запись из другой таблицы, я знаю, что это не круто делать запросы на мой взгляд, так как я могу это сделать?(эта форма похожа на регистрацию студента, а тег выбора - там, где студент выбирает свой курс)

1 Ответ

1 голос
/ 10 июля 2019

Это довольно часто, и вы правы; не добавляйте логику запроса к вашему представлению. Поскольку контроллер возвращает это представление, выполните запрос в контроллере и передайте его представлению. Допустим, у вас есть таблица courses, которая содержит записи для «Футзал», «Волей» и т. Д. Настройте свой контроллер следующим образом:

$cpf = $request->input('cpf');

$cooperado = \DB::table('cooperados')
->select('id', 'nome', 'cpf')
->where('cpf', '=', $cpf)
->first();

$courses = Course::orderBy('name')->get();
// Note: use DB::table('courses') if you don't have a `Course` model, but models are preferred

return view('cadastro.create', compact('cooperado', 'courses'));

Затем, по вашему мнению, используйте foreach над значениями $courses:

<select class="form-control" id="extracurricular" name="course">
  @foreach($courses AS $course)
  <option value="{{ $course->id }}">{{ $course->name }}</option>
  @endforeach
</select>

Если все сделано правильно, в вашем <select> должно быть несколько элементов <option>, соответствующих курсам в вашей базе данных.

Примечание: добавленное name="course" к вашему <select>, значение может быть получено в контроллере, обрабатывающем запрос POST через $request->input("course"), и будет id выбранного курса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...