LoginSignup
11
11

More than 5 years have passed since last update.

日本語テーブル名・カラム名のデータベースをLaravelで扱う

Last updated at Posted at 2017-08-31

日本語テーブル名・カラム名のデータベースをLaravelで扱う

SQL Server+AccessのシステムをPHP+MySQLにリプレースする仕事を受けてデータベースを調査していたのですが、テーブル名もカラム名の日本語のデータベースで、苦労するかなと思いましたが、小さな動くサンプルを作って検証したところすんなり動きました。そのサンプルのメモです。

テーブルの作成

以下のようなテーブル「顧客」を作成します。

顧客
顧客コード
名前
住所
電話番号

まずマイグレーションファイルを作ります。

php artisan make:migration create_顧客_table --create=顧客

database/migrations/xxxx_create_顧客_table.phpが出来るので、upメソッドにカラムを追記します。

    public function up()
    {
        Schema::create('顧客', function (Blueprint $table) {
            $table->increments('顧客コード');
            $table->string('名前');
            $table->string('住所');
            $table->string('電話番号');
            $table->timestamps();
        });
    }

マイグレーションを実行します。

php artisan migrate

モデルの作成

php artisan make:model 顧客

app/顧客.phpができるので、以下を追記します。

class 顧客 extends Model
{
    protected $table = '顧客';
    protected $primaryKey = '顧客コード';
    protected $guarded = ['顧客コード']; 
}

デフォルトの命名規則で作るとテーブル名が「顧客s」になり不自然なので、$tableでテーブル名を指定します。プライマリキーのデフォルトもidから日本語に変更します。

ルートの作成

routes/web.phpを書きます。

<?php
use App\顧客;
Route::get('/', function () {
    return view('index', ['顧客達' => 顧客::all()]);
});
Route::post('/', function () {
    顧客::create(request()->toArray());
    return redirect('/');
});

一覧と新規追加のみです。

ビューの作成

resources/views/index.blade.phpを書きます。

<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>顧客管理</title>
</head>
<body>
<form method="post">
    {{ csrf_field() }}
    名前<input name="名前"><br>
    住所<input name="住所"><br>
    電話番号<input name="電話番号"><br>
    <button>登録</button>
</form>
<table>
    <tr><th>顧客コード</th><th>名前</th><th>住所</th><th>電話番号</th></tr>
    @foreach ($顧客達 as $顧客)
        <tr>
            <td>{{ $顧客->顧客コード }}</td>
            <td>{{ $顧客->名前 }}</td>
            <td>{{ $顧客->住所 }}</td>
            <td>{{ $顧客->電話番号 }}</td>
        </tr>
    @endforeach
</table>
</body>
</html>

これで実行すると、一覧と新規投稿が動くと思います。

最後に

SQL Server、MySQLともに普通に日本語のテーブル名・カラム名が使えました。
PHPでも普通に日本語の識別子が使えます。

11
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11