尝试阅读属性“ id”在布尔。但只有编辑形式
我想在编辑表单中添加下拉
input 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');
});
太感谢了!
I would like to add a dropdown
and input
in edit form with options from a table (class), so I am using foreach
. It works fine when I only have the input form, but it gives an error when I add the edit form. I don't understand why. Please help, I'm new to Laravel.
Here's my
input form
(I want to make an edit form like this too, with same inputs and dropdown)
Here's my code.
Views
<!-- 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
Controller
<?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!');
}
}
Route
<?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');
});
Thank you so much!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
尝试修复此问题:
即使有效,至少有一次,您在循环结束时销毁了原始$类变量,因此不再是您开始使用的对象。
修复您的代码,以便将结果数组传递给Blade作为变量名为$类的变量,以便您可以使用:
Try fixing this:
Even though this works, one time at least, you have destroyed the original $class variable at the end of the loop, so it is no longer the array of objects you started with.
Fix your code so that the result array is passed to blade as a variable named $classes, so that you can use: