[英]Attempt to read property "id" on bool. But only in edit form
我想使用表格(類)中的選項添加一個dropdown
並在編輯表單中input
,所以我正在使用foreach
。 當我只有輸入表單時它工作正常,但是當我添加編輯表單時它會出錯。 我不明白為什么。 請幫忙,我是 Laravel 的新手。
這是我的輸入表單(我也想制作這樣的編輯表單,具有相同的輸入和下拉菜單)
這是我的代碼。
意見
<!-- INPUT FORM (MODAL) -->
<form method="post" action="{{ url('/grade/create') }}">
@csrf
<div class="row">
<div class="form-group col-md-8 mb-3">
<label>SNum</label>
<input type="text" pattern="M+[0-9]{7,}" minlength="8" maxlength="8" class="form-control" name="SNum"
required="required" />
</div>
<div class="form-group col-md-4 mb-3">
<label>Class</label>
<select class="form-select" name="class[]">
{{-- Works fine --}}
@foreach ($class as $class)
<option value="{{ $class->id }}">{{ $class->class }}</option>
@endforeach
</select>
</div>
</div>
</form>
@foreach ($grades as $grade)
<!-- EDIT FORM (MODAL) -->
<form method="post" action="{{ url('/grade/update' . $grade->id) }}">
@csrf
<div class="row">
<div class="form-group col-md-8 mb-3">
<label>SNum</label>
<input type="text" value="{{ $grade->SNum }}" pattern="M+[0-9]{7,}" minlength="8"
maxlength="8" class="form-control" name="SNum" required="required" />
</div>
<div class="form-group col-md-4 mb-3">
<label>Class</label>
<select class="form-select" name="class[]" id="class{{ $grade->id }}">
@foreach ($class as $class)
{{-- Attempt to read property "id" on bool --}}
<option value="{{ $class->id }}">{{ $class->class }}</option>
@endforeach
</select>
</div>
</div>
</form>
<div class="modal fade" id="deleteModal{{ $grade->id }}" tabindex="-1" role="dialog"
aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<form method="post" action="{{ url('/grade/delete/' . $grade->id) }}">
@csrf
<div class="modal-body"
style="height:100px; display:flex; align-items:center; justify-content:center;">
<h5 class="text-center">Are you sure?</h5>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-danger">Ya</button>
</div>
</form>
</div>
</div>
</div>
@endforeach
控制器
<?php namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Grade;
use App\Models\GradeClass;
use App\Models\Class;
class MainController extends Controller
{
public function index()
{
$grades = Grade::get();
$class = Class::get();
return view('main', compact('grades', 'class'));
}
public function store(Request $request)
{
$request->validate([
'SNum' => 'required|max:8|min:8',
'class' => 'required'
]);
$grade = Grade::create([
'SNum' => $request['SNum']
]);
if ($request->has('class')) {
foreach ($request['class'] as $classId) {
GradeClass::create([
'grades_id' => $grade->id,
'class_id' => (int) $classId,
]);
}
}
return redirect('/')->with('status', 'Grade added!');
}
public function update(Request $request, Grade $grade)
{
$request->validate([
'SNum' => 'required|max:8|min:8',
'class' => 'required'
]);
$grade->SNum = $request['SNum'];
$grade->save();
GradeClass::where('grades_id', $grade->id)->delete();
if ($request->has('class')) {
foreach ($request['class'] as $classId) {
GradeClass::create([
'grades_id' => $grade->id,
'class_id' => (int) $classId,
]);
}
}
return redirect('/')->with('status', 'Grade updated!');
}
public function destroy(Grade $grade)
{
GradeClass::where('grades_id', $grade->id)->delete();
$grade->delete();
return redirect('/')->with('status', 'Grade deleted!');
}
}
路線
<?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\MainController; Route::get('/', [MainController::class, 'index']); Route::controller(MainController::class)->prefix('grade')->name('grade.')->group(function () { Route::post('/create', 'store')->name('store'); Route::post('/update/{grade}', 'update')->name('update'); Route::post('/delete/{grade}', 'destroy')->name('destroy'); });
太感謝了!
嘗試解決這個問題:
@foreach ($class as $class)
即使這樣有效,至少有一次,您已經在循環結束時破壞了原始的 $class 變量,因此它不再是您開始使用的對象數組。
修復您的代碼,以便將結果數組作為名為 $classes 的變量傳遞給刀片,以便您可以使用:
@foreach ($classes as $class)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.