尝试阅读属性“ id”在布尔。但只有编辑形式

发布于 2025-02-09 23:22:12 字数 5779 浏览 2 评论 0原文

我想在编辑表单中添加下拉 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我们只是彼此的过ke 2025-02-16 23:22:12

尝试修复此问题:

@foreach ($class as $class)

即使有效,至少有一次,您在循环结束时销毁了原始$类变量,因此不再是您开始使用的对象。

修复您的代码,以便将结果数组传递给Blade作为变量名为$类的变量,以便您可以使用:

@foreach ($classes as $class)

Try fixing this:

@foreach ($class as $class)

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:

@foreach ($classes as $class)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文