Я создаю приложение laravel, которое позволяет пользователям создавать посты в блогах.
Модель Post выглядит следующим образом:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
// Table Name
protected $table = 'posts';
// Primary key
public $primaryKey = 'id';
// Timestamps
public $timestamps = true;
}
А это файл миграции:
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePostsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->mediumText('body');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('posts');
}
}
Я использую базу данных PostgreSQL, и проблема в том, что $table->increments('id');
делает столбец идентификатора типом "Integer" вместо "Serial", который используется в Postgres для этого типа поля.
При попытке обновить сообщения возникает следующая ошибка:
Unique violation: 7 ERROR: duplicate key value violates unique constraint "posts_pkey" DETAIL: Key (id)=(1) already exists. (SQL: insert into "posts" ("title", "body", "updated_at", "created_at") values (Post 3, Test test test, 2019-03-06 17:27:37, 2019-03-06 17:27:37) returning "id")
Мне нужен способ определить это поле как «серийный».
EDIT:
Моя функция хранилища PostsController выглядит следующим образом:
public function store(Request $request)
{
$this->validate($request, [
'title' => 'required',
'body' => 'required'
]);
// Create post
$post = new Post;
$post->title = $request->input('title');
$post->body = $request->input('body');
$post->save();
return redirect('/posts')->with('success', 'Post created');
}