Asked Apr 22nd, 4:47 AM 119 1 3
  • 119 1 3
+2

Lỗi khi thực viết migration change field trong Laravel với postgresql

Share
  • 119 1 3

Hi anh chị,

Em đang làm dự án sử dụng laravel và postgresql. Khi e viết migration tạo bảng với tên bảng dạng in hoa ( cái này dự án bắt buộc để connect với bên thứ 2), ví dụ tên bảng Employees, lúc tạo thì bình thường, nhưng khi e viết migration để chỉnh sửa column trong bảng thì phát sinh lỗi : code migration:

  Schema::table('Employees', function (Blueprint $table) {
            $table->string('DateOfBirth')->nullable()->change();
        });

Lỗi:

 Doctrine\DBAL\Exception\TableNotFoundException

  An exception occurred while executing 'SELECT obj_description('Employees'::regclass) AS table_comment;':

SQLSTATE[42P01]: Undefined table: 7 ERROR:  relation "employees" does not exist
LINE 1: SELECT obj_description('Employees'::regclass) AS table_comme...

Không biết có anh chị nào gặp trường hợp này rồi có thể support e với được không ạ!

Apr 22nd, 5:19 AM

Tức là lúc chạy lệnh migrate thì nó bắn lỗi như kia à bạn?

0
| Reply
Share
Dương Siêu @duongdosieu224
Apr 22nd, 6:27 AM

@huukimit dạ đúng rồi, viết xong chạy php artisan migrate là bị

0
| Reply
Share
Apr 22nd, 6:34 AM

@duongdosieu224 Cho mình hỏi cái:

  1. Bạn dùng laravel version bao nhiêu vậy nhỉ?
  2. Cái code sửa cột DateOfBirth là ở file migration mới hay bạn sửa trực tiếp vào file migration tạo bảng Employees đã có trước đó vậy?
  3. Bạn show full source của 2 file migration tạo table Employees và file migration sửa cột DateOfBirth được ko nhỉ?
0
| Reply
Share
Dương Siêu @duongdosieu224
Apr 22nd, 12:10 PM

@huukimit

  1. Mình dùng laravel ver7
  2. Mình tạo migration mới
  3. File migration tạo:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateEmployeesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('Employees', function (Blueprint $table) {
            $table->uuid('Id')->unique();
            $table->primary('Id');
            $table->string('FullName')->nullable();
            $table->date('DateOfBirth')->nullable();
            $table->timestamp('CreationTime', 0)->nullable();
            $table->timestamp('LastModificationTime', 0)->nullable();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('Employees');
    }
}

file migration sửa

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class ChangeFieldDateOfBirthToEmployeesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('Employees', function (Blueprint $table) {
            $table->string('DateOfBirth')->nullable()->change();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('Employees', function (Blueprint $table) {
            $table->date('DateOfBirth')->nullable()->change();
        });
    }
}
0
| Reply
Share

3 ANSWERS


Answered Apr 23rd, 3:22 AM
Accepted
+3

Vì nó tự đổi sang lowercase đó, cái này do postgresql chứ không phải do laravel.

Schema::table('"Employees"', function (Blueprint $table) {
            $table->string('"DateOfBirth"')->nullable()->change();
        });

try it!

Share
Dương Siêu @duongdosieu224
Apr 23rd, 3:31 AM
Answered Apr 23rd, 2:47 AM
+2

Bạn thử override getTable() bên trong model xem

public function getTable()
{
    return ucfirst(parent::getTable());
}
Share
Dương Siêu @duongdosieu224
Apr 23rd, 2:53 AM

bên trong migration chứ ạ

0
| Reply
Share
Answered Monday, 10:18 AM
0

Cái code sửa cột DateOfBirth là ở file migration mới hay bạn sửa trực tiếp vào file migration tạo bảng Employees đã có trước đó vậy?

https://kyoo.in/cat/courses/

Share