我正在將用 php
和 laravel
編寫的 Web 應用程式重寫為 JavaScript 堆疊。目前我正在重新設計資料庫模式,似乎是 mysql 到 postgres。
我對以下 create table
指令的一些語法有點困惑
public function up() { Schema::create('sessions', function (Blueprint $table) { $table->string('id')->unique(); $table->unsignedInteger('user_id')->nullable(); $table->string('ip_address', 45)->nullable(); $table->text('user_agent')->nullable(); $table->text('payload'); $table->integer('last_activity'); }); }
根據我的理解,上面的 postgres
等效項是
create table sessions ( id text unique not null, user_id int references users, ip_address text, user_agent text, payload text, last_activity integer );
但是我不確定我是否正確翻譯了$table->string('ip_address', 45)->nullable();
,因為我不確定string('ip_address', 45 )
正在做。
我對 potgres 的轉換是否正確,或者我需要更改什麼才能在 postgres create 命令中獲得等效的內容?
P粉1847475362024-01-17 09:24:02
例如,您可以按照開發人員的預期利用 artisan
指令的遷移。它已在如何將 Laravel 遷移轉換為原始 SQL 腳本中進行了解釋 您可以使用:
php artisan migrate --pretend
但是,它有一個警告,您需要有一個可用的資料庫伺服器才能真正使其工作。它將在目標資料庫中建立migrations
表(如果不存在),但不會在遷移中建立任何表。它還將遵循 migrations
表,因此您可能需要在執行 pretend
之前使用新資料庫或截斷 migrations
表。
或者,您可以深入研究 Laravel 的 SQL「語法」程式碼 並從中找出答案。遺憾的是,目前還沒有人為其製作一個易於閱讀的參考表。
在你的情況下,它大致翻譯如下:
Laravel | Postgre |
---|---|
$table->string('id')->unique(); | #id varchar |
#$table->unsignedInteger('user_id')->nullable(); |
user_id 整數 null |
$table->string('ip_address', 45)->nullable(); |
ip_address varchar(45) null |
#$table->text('user_agent')->nullable(); | #user_agent varchar null |
$table->text('payload'); | #有效負載文字 |
#$table->integer('last_activity'); |
last_activity 整數 |