Laravel nie mozna zapisac komentarza dla danego Posta

Laravel nie mozna zapisac komentarza dla danego Posta
M1
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 6 lat
  • Postów:48
0

Witam Mam problem gdyz nie moge zapisac komentarza dla danego posta i nie mmam juz pojecia co tu moze byc źle i musze poprosic was o Pomoc z Gory dziekuje

Kontroller:

Kopiuj
  public function create($post_id)
    {
        $post = Post::all()->find($post_id);
        return view('comments.create')->with('post',$post);
    }

    public function store(CreateCommentRequest $request)
    {
        $data = $request->all();
        $comment = new Comment($data);
        Auth::user()->comment()->save($comment);
        return redirect('/blog');
    } 

Widok:

Kopiuj
@extends('base')

@section('pageContent')
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <div class="card">
                <div class="panel-body">
                    <!-- Formularz -->
                    @if(count($errors)>0)
                        <div class="alert alert-danger">
                            <ul>
                                @foreach($errors->all() as $error)
                                    <li>{{$error}}</li>
                                @endforeach
                            </ul>
                        </div>
                    @endif

                    {!! Form::open(['url'=>"/blog/add_comment/$post->id", 'class'=>'form-horizontal']) !!}
                    <div class="jumbotron">


                        <div class="form-group">
                            <div class="col-md-4 control-label">
                                {!! Form::label('content','Zawartosc: ') !!}
                            </div>

                            <div class="col-md-6">
                                {!! Form::textarea('content', null,['class'=>'form-control']) !!}
                            </div>
                        </div>


                        <div class="form-group">

                            <div class="col-md-6 col-md-offset-4">
                                {!! Form::submit('Zapisz',['class'=>'btn btn-primary']) !!}
                            </div>
                        </div>

                        <div class="form-group">
                            {{ Form::hidden('post_id',$post->id) }}
                        </div>

                    {!! Form::close() !!}
                </div>
            </div>
        </div>
    </div>
@endsection 

Web.php

Kopiuj
Route::get('/blog/add_comment/{id}', 'CommentsController@create');
Route::post('/blog/add_comment/{id}', 'CommentsController@store');
Route::get('/blog/deleteComment/{id}', 'CommentsController@deleteComment');

Blad:

SQLSTATE[23000]: Integrity constraint violation: 19 NOT NULL constraint failed: comments.post_id (SQL: insert into "comments" ("content", "user_id", "updated_at", "created_at") values (dsadwdawd, 1, 2016-12-13 11:41:53, 2016-12-13 11:41:53))

edytowany 2x, ostatnio: Miloszex112
VE
  • Rejestracja:około 9 lat
  • Ostatnio:2 dni
  • Postów:160
1

Na pewno w requescie masz wszystkie pola, które są w Schema tabeli?

DO
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 6 lat
  • Lokalizacja:Warszawa
  • Postów:213
1

Komunikat mówi o błędzie, że nie wypełniłeś pola POST_ID w tabeli comments i faktycznie w query błędu nie masz takiego pola, a powinno być w myśl zasady one2many (jeden post może mieć wiele komentarzy, ale dany komentarz może dotyczyć tylko jednego postu).

Być może błąd też leży w migracjach, gdzie najzwyczajniej takiego pola nie dodałeś. Wrzuć migracje i modele, żeby sprawdzić relacje to wszystko będzie jasne.

PS. nie łatwiej byłoby stworzyć formularz z dodawaniem komentarza bezpośrednio w widoku show() postu zamiast przechodzić na osobną stronę? :P

edytowany 3x, ostatnio: Doggye
0

Sprawdź, czy w modelu masz coś takiego z odpowiednimi danymi:

Kopiuj
protected $fillable = [
        'favicon',
    ]; 

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.