5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Laravelで0始まりの数字文字列をDBから取得した時、String型からInt型に自動変換(0除去)される罠

Last updated at Posted at 2018-04-06

環境

PHP:7.1.3
Laravel:5.3.31
MySQL:5.7.17

テーブル構成

sample_numbersテーブル

カラム    型       NULL サンプルの値
number (主キー) varchar(255) × 012345678
created_at timestamp × 割愛
updated_at timestamp × 割愛

課題

numberに格納された0始まりの数字文字列をコレクションでDBから取得(データアクセス)した際、String型からInt型に自動変換される事象が発生しました。

〜自動変換の動き〜
 DBにある状態 012345678
 コレクションの状態 012345678
 コレクションからデータアクセスした状態 12345678

今回、0始まりのまま値を使用する必要があるので、自動変換をしないようにする方法を探していました。

対応

該当モデルの $castsプロパティ にカラム名と変換したい型を指定すると、データアクセス時に型変換をしてくれることがわかりました。

app/Models/SampleNumber.php

class SampleNumber extends Model
{
    protected $primaryKey = 'number';

    protected $fillable = [
        'number'
    ];

    // ここを追加
    protected $casts = [
        'number' => 'string'
    ];
}

#補足
String型からInt型に変換されるのは、 Laravelのコレクションからデータアクセスしたとき。
コレクションの状態で dd(変数); などでデバッグし、値を見た場合はまだString型のままです。

5
3
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
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?