Столбец ID в PostgreSQL (Laravel 5.8) - PullRequest
1 голос
/ 06 марта 2019

Я создаю приложение 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');
}

1 Ответ

1 голос
/ 06 марта 2019

По умолчанию столбец 'id' является первичным ключом, и вам не нужно указывать его в модели, возможно, поэтому он пытается сделать столбец целочисленным.

Попробуйте удалить

public $primaryKey = 'id';

из определения модели и попробуйте выполнить новую миграцию и выполнить запрос.

Я не уверен в этом ответе, но он немного длинен для комментария, поэтому размещение ответа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...