環境
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型のままです。