【Laravel】MySQLに配列(連想配列)を保存する方法
どーもこんにちはよーすけです。
今回はMySQLに配列(連想配列)を保存する方法について解説します。
予定管理アプリを作っている中でいい方法が思いつかずどうしても配列(連想配列)をMySQLに登録しないとうまくいかないことがあったのでメモとして残します。
そもそも配列をMySQLに登録できるのか?
結論から言うと配列をMySQLに登録することはできません。
なぜならDBには正規化という考え方があり、中でも第一正規化という1つのカラムには構造を持ったデータを入れず単一のデータを入れるというルールがあるため配列を挿入することはできません。
どうやって配列をMySQLに登録するのか
調べてみるといくつか方法がありました。その中でも今回は、
serialize()
unserialize()
の2つを用いました。
値の保存可能な表現を生成します。
型や構造を失わずに PHP の値を保存または渡す際に有用です。
シリアル化された文字列を PHP の値に戻すには、unserialize()を使用してください。
引用:https://www.php.net/manual/ja/function.serialize.php
unserialize()は、シリアル化された変数を PHP 変数値に戻す変換を行います。
引用:https://www.php.net/manual/ja/function.unserialize.php
まずMySQLに登録したい配列を用意しその配列をserialize()します。
$schedule = [
'monday' => 'ok',
'tuesday' => 'ok',
'wednesday' => 'ok',
'thursday' => 'ok',
'friday' => 'ok',
'saturday' => 'ok',
'sunday' => 'ng'
];
$serialize_schedule = serialize($schedule);
これで$serialize_schedule
にMySQLに保存可能な値に変換されています。
あとはsave()やupdate()するなりDBに登録してください。
これでMySQLに配列を保存することが出来ました。
MySQLからデータを取り出し、元の配列に戻したい時はunserialize()
を使います。
$unserialize_schedule = unserialize($schedule);
dd($unserialize_schedule);
// $unserialize_schedulenの中身
[
'monday' => 'ok'
'tuesday' => 'ok'
'wednesday' => 'ok'
'thursday' => 'ok'
'friday' => 'ok'
'saturday' => 'ok'
'sunday' => 'ng'
]
しっかり配列として取得できていますね。
まとめ
今回はserialize()とunserialize()を紹介しましたが、他にもCSVやJSONを用いてDBに保存すると言う方法も存在するので今後紹介していきます。
コメント