Übergeben eines booleschen Werts aus dem Kontrollkästchen in Laravel-Form

Lesezeit: 2 Minuten

Benutzer-Avatar
Charles Smith

Ich versuche, den booleschen Wert zu speichern, wenn ich einen neuen Beitrag erstelle, und lasse ihn dann den Wert aktualisieren, wenn ich den Beitrag aktualisiere. Wenn ich einen neuen Beitrag erstelle und speichere, bleibt er in der Datenbank bestehen und ich kann ihn sogar ohne Probleme aktualisieren. Ich habe nur ein kleines Problem im Umgang mit einem booleschen Kontrollkästchen. Dies ist mein erstes Projekt in Laravel, was sicher ein Teil meiner Hürde ist.

Schema

...
public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->increments('id');
            $table->unsignedBigInteger('user_id');
            $table->string('title');
            $table->text('body')->nullable();
            $table->string('photo')->nullable();
            $table->boolean('is_featured')->nullable()->default(false);
            $table->boolean('is_place')->nullable()->default(false);
            $table->string('tag')->nullable()->default(false);
            $table->timestamps();
        });

        Schema::table('posts', function (Blueprint $table) {
            $table->foreign('user_id')->references('id')->on('users');
        });
    }
...

PostController.php

...
public function store(Request $request)
    {
        $rules = [
            'title' => ['required', 'min:3'],
            'body' => ['required', 'min:5']
        ];
        $request->validate($rules);
        $user_id = Auth::id();
        $post = new Post();
        $post->user_id = $user_id;
        $post->is_featured = request('is_featured');
        $post->title = request('title');
        $post->body = request('body');
        $post->save();

        $posts = Post::all();
        return view('backend.auth.post.index', compact('posts'));
    }
...

post/create.blade.php

...
<input type="checkbox" name="is_featured" class="switch-input"
       value="{{old('is_featured')}}">
...

Benutzer-Avatar
Mike32

Wenn ich das Problem richtig verstehe, können Sie Cast das Attribut als boolescher Wert im Modell.

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    protected $casts = [
        'is_featured' => 'boolean',
        'is_place' => 'boolean',
    ];
}

Dann sollten Sie diesen Wert in Ihrem Formular überprüfen, um festzustellen, ob das Kontrollkästchen aktiviert ist.

<input type="checkbox" name="is_featured" class="switch-input" value="1" {{ old('is_featured') ? 'checked="checked"' : '' }}/>

In Ihrem Controller sollten Sie nur prüfen, ob die Eingabe übermittelt wird. Eine ungeprüfte Eingabe wird überhaupt nicht ausgeführt.

$post->is_featured = $request->has('is_featured');

  • $casts scheint bei mir keine Wirkung zu haben. Wenn Sie “alt” und dann “has” überprüfen müssen, warum verwenden Sie es überhaupt?

    – Eisfeuer

    2. Januar 2021 um 9:37 Uhr

Versuche dies
$post->is_featured = $request->input('is_featured') ? true : false;

1011770cookie-checkÜbergeben eines booleschen Werts aus dem Kontrollkästchen in Laravel-Form

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy