Laravel PostgreSQLのコメントについて調べた

Laravel

Laravel5.5以前は、Postgresのコメント機能が対応していない

Laravelで以下の記事に紹介しているような方法で、マイグレーションファイルに記述することで、テーブルのカラムにコメント(論理名など)を付与したいことがあります。

しかし、Laravel5.5以前はPostgreSQLだと、マイグレーションファイルに記述する->comment(”)コメント機能が対応していないみたいでしたので、詳細を調べていくことにします。

なおLaravelでは、データベース関連のソースはこちらのGithubで管理されているので、こちらを確認していくことにします。

MySQLのソース

以下のように、MySQLの方はLaravel5.5以前でもコメントを付与する機能が付いていることがわかります。

※以下のサンプルは、Laravel5.5(Illuminate Database5.5)のものを掲載しています。

vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php

    /**
     * The possible column modifiers.
     *
     * @var array
     */
    protected $modifiers = [
        'Unsigned', 'VirtualAs', 'StoredAs', 'Charset', 'Collate', 'Nullable',
        'Default', 'Increment', 'Comment', 'After', 'First',
    ];
.
.
.
    /**
     * Get the SQL for a "comment" column modifier.
     *
     * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
     * @param  \Illuminate\Support\Fluent  $column
     * @return string|null
     */
    protected function modifyComment(Blueprint $blueprint, Fluent $column)
    {
        if (! is_null($column->comment)) {
            return " comment '".addslashes($column->comment)."'";
        }
    }

Github上のソース

PostgreSQLのソース

以下のように、PostgreSQLの方は、Laravel5.5以前ではコメントを付与する機能が付いていないことがわかります。

※以下のサンプルは、Laravel5.5(Illuminate Database5.5)のものを掲載しています。

vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php

    /**
     * The possible column modifiers.
     *
     * @var array
     */
    protected $modifiers = ['Increment', 'Nullable', 'Default'];

Github上のソース

Laravel5.6以降は、Postgresのコメント機能が対応している

Laravel5.6以降では、カラムにコメントを付与する機能が追加されています。

詳細を確認していきましょう!

PostgreSQLのソース

PostgreSQLのカラムにコメントを付与する機能が追加されているのがわかりますね!

※以下のサンプルは、Laravel5.6(Illuminate Database5.6)のものを掲載しています。

    /**
     * The commands to be executed outside of create or alter command.
     *
     * @var array
     */
    protected $fluentCommands = ['Comment'];
.
.
.
    /**
     * Compile a comment command.
     *
     * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
     * @param  \Illuminate\Support\Fluent  $command
     * @return string
     */
    public function compileComment(Blueprint $blueprint, Fluent $command)
    {
        return sprintf('comment on column %s.%s is %s',
            $this->wrapTable($blueprint),
            $this->wrap($command->column->name),
            "'".str_replace("'", "''", $command->value)."'"
        );
    }

Github上のソース

実際にテーブルやカラムにコメントを付与する方法

実際にコメントを付与する方法はこちらに纏めています!

まとめ

以前Laravel5.5を使用している時にPostgreSQLでは実際にやってみてコメント機能が使えないという記憶がありました。

しかし、最近Laravel5.7、5.8を使ってみて、PostgreSQLで実際にコメントを付与してみたところ、できた!?!?となったので、詳しく調べてみました。

実際にGoogle様で、laravel postgresql コメントで検索すると、ヒットするのはPostgreSQLだとコメントが付けられないという記事ばかりでした。(実際はLaravel5.6以降は付けられる)

Laravelは日本語の情報が豊富で基本ソースとか英語を読まなくてもいけちゃいますが、こうゆう細かい部分はやっぱりちゃんとソースを見たほうが安心できますね。

オススメの関連商品

コメント