خطای General error Field parent id

- 11 ماه پیش
توسط حسام موسوی آپدیت شد
پایان جهان ( 71258 تجربه )
11 ماه پیش
تخصص : بیکار برنامه نویس

درود دوستان...
یه سیستم نظر دهی لاراول ایجاد کردم و دیتابیس و مدل ها و هم چون کنترلرها ایجاد کردم و در آخر این خطا رو به رو شدم...
توی سایت های خارجی این خطا جستجو کردم چیزی دستگیرم نشد.
خطای زیر:

Illuminate \ Database \ QueryException (HY۰۰۰)
SQLSTATE[HY۰۰۰]: General error: ۱۳۶۴ Field 'parent_id' doesn't have a default value (SQL: insert into `comments` (`body`, `user_id`, `commenttable_id`, `commenttable_type`) values (تست, ۱, ۱, App\Discuss))

CommemtContorller :

class CommentController extends Controller
{
    public function store(Request $request)
    {
        $comment = new Comment;
        $comment -> body = $request -> get('comment_body');
        $comment -> user() -> associate($request->user());
        $discuss = Discuss::find($request->get('discuss_id'));
        $discuss -> comments() -> save($comment);

        return back();
    }
}

create_comments_table :

public function up()
    {
        Schema::create('comments', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('user_id')->unsigned();
            $table->integer('parent_id')->unsigned();
            $table->text('body');
            $table->integer('commenttable_id')->unsigned();
            $table->string('commenttable_type');

        });
    }

Model Comment :

class Comment extends Model
{
    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public $timestamps = false;
}

Model Discuss :

class Discuss extends Model
{
    public function tags()
    {
        return $this->belongsToMany('App\Tag');
    }

    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function comments()
    {
        return $this->morphMany(Comment::class, 'commenttable')->whereNull('parent_id');
    }

    public $timestamps = false;
}

نمایش نظرات :

            <div class="card">
                <div class="card-header">پاسخ دادن به سوال</div>
                <div class="card-body">
                    @foreach ($discuss -> comments as $comment)
                    <div class="media">
                        <img class="mr-۳" src="{{ asset('img/۱.png') }}">
                        <div class="media-body">
                            <h۶ class="mt-۰">{{ $comment -> user -> name }}</h۶>
                            <p>{{ $comment -> body }}</p>
                        </div>
                    </div>
                    @endforeach
                    {!! Form::open(array('route'=>'comment.add')) !!}
                    @csrf
                    @method('post')
                    <div class="form-group">
                        {!! Form::label('commets','متن نظر') !!}
                        {!! Form::textarea('commets', null, ['class' => 'form-control', 'name' => 'comment_body']) !!}
                        <input type="hidden" name="discuss_id" value="{{ $discuss->id }}" />
                    </div>
                    {!! Form::button('ثبت نظر',['type'=>'submit','class'=>'btn btn-primary', 'style' => 'margin-top:۱۰px;']) !!}
                    {!! Form::close() !!}
                </div>
            </div>
بهترین پاسخ انتخاب شده توسط پایان جهان
پایان جهان
11 ماه پیش

مشکل حل شد...
خطای ناشی از nullable نبودن parent_id هستش...

$table->integer('parent_id')->unsigned()->nullable();
پایان جهان ( 71258 تجربه )
11 ماه پیش
تخصص : بیکار برنامه نویس

مشکل حل شد...
خطای ناشی از nullable نبودن parent_id هستش...

$table->integer('parent_id')->unsigned()->nullable();
حسام موسوی ( 204334 تجربه )
11 ماه پیش
تخصص : طراح و برنامه نویس

بجای این کار بهتره مقدار رو پیش فرض یا همون default فیلد مربوطه رو 0 قرار بدید تا بعدا راحت بتونید کامنت های اصلی با پاسخ رو جدا کنید

برای ارسال پاسخ باید وارد سایت شوید