【Laravel】DB(MySQL)に配列を保存する方法

DBに配列を保存する方法

【Laravel】MySQLに配列(連想配列)を保存する方法

 

どーもこんにちはよーすけです。

今回はMySQLに配列(連想配列)を保存する方法について解説します。

予定管理アプリを作っている中でいい方法が思いつかずどうしても配列(連想配列)をMySQLに登録しないとうまくいかないことがあったのでメモとして残します。

目次

そもそも配列をMySQLに登録できるのか?

結論から言うと配列をMySQLに登録することはできません。

なぜならDBには正規化という考え方があり、中でも第一正規化という1つのカラムには構造を持ったデータを入れず単一のデータを入れるというルールがあるため配列を挿入することはできません。

正規化とは?
データの
一貫性の維持効率的なデータアクセスを可能にする関係設計へ導くための方法

どうやって配列をMySQLに登録するのか

調べてみるといくつか方法がありました。その中でも今回は、

serialize()
unserialize()

の2つを用いました。

serialize(mixed$value):string

値の保存可能な表現を生成します。

型や構造を失わずに PHP の値を保存または渡す際に有用です。

シリアル化された文字列を PHP の値に戻すには、unserialize()を使用してください。

引用:https://www.php.net/manual/ja/function.serialize.php

unserialize(string$data,array$options= []):mixed

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に保存すると言う方法も存在するので今後紹介していきます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

よーすけのアバター よーすけ プログラマー

2022年4月 大阪自社開発会社入社
使用言語:JavaScript / PHP / Laravel / Vue.js / (WordPress)
勉強中:React / Next.js / TypeScript

Web制作実績:6件
デザインからコーディング、運用まで幅広く行います
ご依頼はお問い合わせフォームからお願いします。

コメント

コメントする

目次