簡體   English   中英

嘗試在 bool 上讀取屬性“id”。 但僅限於編輯形式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM