Я новичок в Laravel, поэтому я борюсь. У меня есть система комментариев, которая отлично работала, но теперь я хочу добавить к ней и систему ответов. Поэтому я решил сделать это, добавив столбец parent_id в таблицу комментариев, а затем проверив, есть ли у комментария родитель. Но я не знаю, как именно в этом случае должен работать метод store. Вот моя база данных, настроенная для комментариев:
public function up()
{
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();
});
}
А теперь настройка столбца ответа:
public function up()
{
Schema::table('comments', function (Blueprint $table) {
$table->unsignedBigInteger('parent_id')->nullable();
$table->foreign('parent_id')->references('id')->on('comments');
});
}
Модель:
class Comment extends Model{
use HasFactory;
protected $guarded = [];
public function post()
{
return $this->belongsTo(Post::class);
}
public function author()
{
return $this->belongsTo(User::class, 'user_id');
}
public function replies() {
return $this->hasMany('App\Comment', 'parent_id');
}
}
Контроллер:
public function store(Post $post){
request()->validate([
'body' => 'required'
]);
$post->comments()->create([
'user_id' => request()->user()->id,
'parent_id' => request()->get('id'),
'body' => request('body')
]);
return back();
}
Я просто не знаю, как именно я могу получить parent_id в функции хранилища, поэтому я был бы признателен за некоторые предложения.
это должен быть идентификатор комментария, который получил ответ
что-то вроде этого
$post->comments()->create([
'user_id' => request()->user()->id,
'parent_id' => request()->get('comment_id'),
'body' => request('body')
]);
Я надеюсь, что это полезно
используйте код:
public function store(Post $post) {
request()->validate([
'body' => 'required'
]);
$post->comments()->create([
'user_id' => request()->user()->id,
'parent_id' => request()->get('comment_id'),
'body' => request('body')
]);
return back();
}
С вашего внешнего интерфейса вы передаете comment_id (parent_id), если это ответ.