Я новичок в 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])
Я обновил свой вопрос. Пожалуйста, проверьте еще раз :)
Я отредактировал свой ответ, посмотрите, работает ли он.
В вашем контроллере у вас есть функция для возврата представления.
Измените его, чтобы включить ->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();
Я пишу верхний код в функции индекса, но он выдает ошибку из-за того, что в нем уже есть код одного раздела. Где я должен написать этот код?
Добавьте свою индексную функцию и сообщение об ошибке в сообщение.
' public function index()' { $sections = Section::all(); return view('sections.index', compact('sections')); $classs = Classs::all()->pluck(['id', 'title']); вернуть представление ('sections.index') -> с ('классы', $ классы); }'
Не могли бы вы добавить его в пост, чтобы было немного легче читать.
Это работает, но не могли бы вы сказать мне, где я могу написать условия, такие как select * from class, где role_id = 2 и т. д.
Обновил ответ еще раз.
Спасибо, чувак :) Также, пожалуйста, помогите мне в случае, если я показываю данные, такие как [data-myclassid = "{{$cat->class_id}}"], я получаю идентификатор, но мне нужно имя этого идентификатора, поскольку это внешний ключ
Вам нужно будет изучить Красноречивые отношения в Laravel
Теперь я использовал этот код на странице блейда.
@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>
Итак, вы хотите раскрывающийся список со всеми классами? Если это так, пожалуйста, добавьте миграцию для вашей таблицы классов :)