Heim  >  Fragen und Antworten  >  Hauptteil

LARAVEL8: Versucht, auf die Eigenschaft „id“ auf Null zuzugreifen

Ich bin neu bei Laravel und lerne es von Laracast. Hier ist mein Problem: Ich erstelle ein Kommentarformular und sein PHP-Code sieht so aus:

<section class="col-span-8 col-start-5 mt-10 space-y-6">
    <!-- Post form -->
    <form method="POST" action="/post/{{ $post->slug }}/comments" class="border border-gray-200 p-6 rounded-xl">
        @csrf
        <header class="flex items-center">
            <img src="https://i.pravatar.cc/100?id={{ auth()->id() }}" alt="" width="40" height="40" class="rounded-full">
            <h2 class="ml-3 ">Want to participate?</h2>
        </header>
        <div class="mt-6">
            <textarea class="w-full text-sm focus:outline-none focus:ring"
             name="body"  
             cols="30" rows="10"
              placeholder="Quick,think of something to say!" ></textarea>
        </div>
    
        <div>
            <button type="submit" class="bg-blue-500 text-white uppercase font-semi-bold text-xs py-2 px-10 rounded-2xl hover:bg-blue-600">Post</button>
        </div>

Dies ist die entsprechende Route:

Route::post('post/{post:slug}/comments',[PostCommentsController::class, 'store']);

Controller: Ich vermute, dass hier ein Problem vorliegt 'user_id'=> request()->user()->id,我尝试了多种方法来实现这种方法,例如 auth()-> id, Auth::user()->id

<?php

namespace AppHttpControllers;

use AppModelsPost;


class PostCommentsController extends Controller
{
    public function store(Post $post){

        
        request()->validate([
            'body'=>'required'
        ]);

        $post->comments()->create([
            'user_id'=> request()->user()->id,
            'body' => request('body')
        ]);

        return back();
    }
}

Dies ist die Migrationstabelle für Kommentare

Schema::create('comments', function (Blueprint $table) {
            $table->id();
            $table->foreignId('post_id')->constrained()->cascadeOnDelete();
            $table->foreignId('user_id')->constrained()->cascadeOnDelete();
            $table->text('body');
            $table->timestamps();

Post-Migrationstabelle:

Schema::create('posts', function (Blueprint $table) {
    $table->id();
    $table->foreignId('user_id')->constrained()->cascadeOnDelete();
    $table->foreignId('category_id');
    $table->string('slug')->unique();
    $table->string('title');
    $table->text('excerpt');
    $table->text('body');
    $table->timestamps();
    $table->timestamp('published_at')->nullable();
});

Wenn ich auf die Schaltfläche „Veröffentlichen“ klicke, erhalte ich die obige Fehlermeldung. Ich habe mein Bestes gegeben, um das Problem zu beheben, aber ich kann es nicht lösen. Kann mir jemand helfen, was mit meinem Code nicht stimmt? Meine Frage mag naiv erscheinen, da ich neu in der Stackoverflow-Community bin

P粉794851975P粉794851975370 Tage vor659

Antworte allen(1)Ich werde antworten

  • P粉952365143

    P粉9523651432023-11-06 00:33:48

    将此代码用于控制器

    class PostCommentsController extends Controller
    {
    public function store(Post $post){
    
        
        request()->validate([
            'body'=>'required'
        ]);
    
        $post->comments()->create([
            'user_id'=> optional(auth()->user())->id,
            'body' => request('body')
        ]);
    
        return back();
    }
    }

    用户必须登录

    Antwort
    0
  • StornierenAntwort