درود دوستان...
یه سیستم نظر دهی لاراول ایجاد کردم و دیتابیس و مدل ها و هم چون کنترلرها ایجاد کردم و در آخر این خطا رو به رو شدم...
توی سایت های خارجی این خطا جستجو کردم چیزی دستگیرم نشد.
خطای زیر:
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>
مشکل حل شد...
خطای ناشی از nullable نبودن parent_id هستش...
$table->integer('parent_id')->unsigned()->nullable();
بجای این کار بهتره مقدار رو پیش فرض یا همون default فیلد مربوطه رو 0 قرار بدید تا بعدا راحت بتونید کامنت های اصلی با پاسخ رو جدا کنید
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟