プログラミング勉強

Laravelで配列を保存する

まずはマイグレーションファイルを作成する

php artisan make:migration create_tests_table

マイグレーションファイルはこんな感じにしました。

    public function up()
    {
        Schema::create('tests', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->timestamps();
            $table->binary('data');
            $table->text('text');
        });
    }

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

 php artisan migrate
Migrating: 2019_06_14_161702_create_tests_table
Migrated:  2019_06_14_161702_create_tests_table

モデルを作成します

php artisan make:model Test

tinkerを起動します

php artisan tinker
$data = array(
... "yabuki" => "hayato",
... "odagiri" => "ryu"
... );
=> [
     "yabuki" => "hayato",
     "odagiri" => "ryu",
   ]

$test = new App\Test();
=> App\Test {#2954}


>>> $test->data = serialize($data);
=> "a:2:{s:6:"yabuki";s:6:"hayato";s:7:"odagiri";s:3:"ryu";}"
>>> $test->text = "SampleData";
=> "SampleData"
>>> $test->save();
=> true

今度はこれを取得します

 $target = App\Test::where('id','=','1')->get();
=> Illuminate\Database\Eloquent\Collection {#2963
     all: [
       App\Test {#2951
         id: 1,
         created_at: "2019-06-15 07:05:11",
         updated_at: "2019-06-15 07:05:11",
         data: "a:2:{s:6:"yabuki";s:6:"hayato";s:7:"odagiri";s:3:"ryu";}",
         text: "SampleData",
       },
     ],
   }
>>> 

>>> $list = unserialize($target[0]->data);
=> [
     "yabuki" => "hayato",
     "odagiri" => "ryu",
   ]
>>> $list
=> [
     "yabuki" => "hayato",
     "odagiri" => "ryu",
   ]
>>> 

余談

MySQL5.7からはjson型が使えるので、もっとスマートにできるのですが、ロリポップとかはバージョンが5.6なので使えないということで、この案を使えば似たようなことができそうです。