Модель Laravel не работает

Я пытаюсь создать страницу поста с комментариями; однако, это не работает, когда я добавляю комментарий к сообщению, потому что система не распознает идентификатор сообщения. Что я делаю неправильно, что не знает, что post_id равен $ post_id

Я получаю следующую ошибку:

SQLSTATE [HY000]: общая ошибка: 1364 Поле ‘post_id’ не имеет значения по умолчанию (SQL: вставить в comments (body, updated_at, created_at) значений (Это тестовый комментарий, 2017-08-15 19:51:47, 2017-08-15 19:51:47))

ФОРМА КОММЕНТАРИЙ

 <div class="well">
<h4>Leave a Comment:</h4>

<form role="form" method="post" action="{{ $post->id }}/comments">
{{  csrf_field() }}

<div class="form-group">
<textarea name="body" class="form-control" rows="3"></textarea>
</div>

<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>

ROUTE

Route::post('/posts/{post}/comments', 'CommentController@store');

КОНТРОЛЛЕР

public function store(Post $post)
{
$post->addComment(request('body'));

return back();
}

КОММЕНТАРИЙ МОДЕЛЬ

class Comment extends Model
{
protected $fillable = ['body'];

public function post()
{
return $this->belongsTo(Post::class);
}
}

ПОСТ МОДЕЛЬ

class Post extends Model
{
public function addComment($body)
{
Comment::create([
'body' => $body,
'post_id' => $this->id
]);
}

public function comments()
{
return $this->hasMany(Comment::class);
}
}

0

Решение

post_id не в массиве

class Comment extends Model
{
protected $fillable = ['body', 'post_id']; //<---
...
}
4

Другие решения

в вашей таблице в MySQL убедитесь, что ваш post_id имеет автоматическое приращение или может быть «ноль». Эта ошибка говорит, что post_id не имеет значения и не может быть значением по умолчанию.

Судя по вашему коду, post_id является вашим первичным ключом, но не установлен на автоматическое увеличение

0

Я вижу, ваша функция контроллера не знает, о чем вы говорите. Вам нужно использовать идентификатор сообщения, который возвращается из вашей формы, и найти сообщение, после чего вы можете сохранить новый комментарий следующим образом.

$comment = new App\Comment(['message' => 'A new comment.']);

$post = App\Post::find(1);

$post->comments()->save($comment);

Как показано в Laravel Docs 5.4 Eloquent это заполнит идентификатор для вас.

Также, если я правильно помню, вам не нужно добавлять [‘post_id’] в ваш массив полей, которые можно заполнить.

Ошибка SQL может быть устранена с помощью «модификатора столбца». (увидеть ниже)

Schema::table('users', function (Blueprint $table) {
$table->string('email')->nullable();
});

Laravel Docs 5.4 Миграции

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector