Как сделать простой динамический список в Laravel?

Я новичок в 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();
});

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

Лезвие/Вид

<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])

Итак, вы хотите раскрывающийся список со всеми классами? Если это так, пожалуйста, добавьте миграцию для вашей таблицы классов :)

rpm192 06.04.2019 17:07

Я обновил свой вопрос. Пожалуйста, проверьте еще раз :)

Abdul Rehman 06.04.2019 17:13

Я отредактировал свой ответ, посмотрите, работает ли он.

rpm192 06.04.2019 22:18
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
3
70
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Измените его, чтобы включить ->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);
}

Can you tell me where can I write conditions such as select * from class where role_id=2 etc.

По сути, в среде 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();

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

Abdul Rehman 06.04.2019 20:55

Добавьте свою индексную функцию и сообщение об ошибке в сообщение.

rpm192 06.04.2019 21:54

' public function index()' { $sections = Section::all(); return view('sections.index', compact('sections')); $classs = Classs::all()->pluck(['id', 'title']); вернуть представление ('sections.index') -> с ('классы', $ классы); }'

Abdul Rehman 06.04.2019 22:08

Не могли бы вы добавить его в пост, чтобы было немного легче читать.

rpm192 06.04.2019 22:11

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

Abdul Rehman 06.04.2019 22:23

Обновил ответ еще раз.

rpm192 06.04.2019 22:28

Спасибо, чувак :) Также, пожалуйста, помогите мне в случае, если я показываю данные, такие как [data-myclassid = "{{$cat->class_id}}"], я получаю идентификатор, но мне нужно имя этого идентификатора, поскольку это внешний ключ

Abdul Rehman 06.04.2019 22:32

Вам нужно будет изучить Красноречивые отношения в Laravel

rpm192 06.04.2019 22:36
Ответ принят как подходящий

Теперь я использовал этот код на странице блейда.

              @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>

Другие вопросы по теме