読者です 読者をやめる 読者になる 読者になる

ユアマイスター株式会社エンジニアブログ

ユアマイスター株式会社のエンジニアが日々徒然。

モデルの作り方

みなさんこんばんは!エンジニアインターン歴が今一番長い竹本です。 なんとみなさんに朗報です。先日から期待の新星ショーケイくんがユアマイスター株式会社のエンジニアチームにインターンとして参加してくれることになりました!
彼のガッツ溢れる忍耐強さは一品です!私も負けてられないぞと思う今日この頃の竹本です。 最初の挨拶もここまでにして、それでは今週も行きましょう「竹本による初心者のためのエンジニアブログ」!!

モデルの作り方

モデル、そうDBのことですね。DBにも種類があって僕らが使ってるのは初学者がよく学ぶMySQLなんですが、今回はそのデータベースファイルを作成するまでの手順を追って行きましょう。

  • migrate

    migrateってなんぞや?っていうのが初学者の最初の疑問ですよね。簡単にいうとDBの更新や削除などを手動ではなく、自動で行ってくれるものです。
    railsやcake,LaravelなどのMVCフレームワークでmigrtionはテーブルの作成や更新、編集など行った情報を差分としてDBに反映してくれます。 実際の手順を説明すると、弊社ではVMVagrantを使っているのでLocalにssh接続して、migrationを行いたいディレクトリに移動し

[vagrant@localhost ディレィトリ名] $bin/cake bake migrations create orders

これでとりあえずmigrationファイルを作成が完了

  • migrationファイルでカラムの追加、設定を加える

    migrationを行うときにそのDBとの差分を反映するメソッドとしてup,downかchangeメソッドがあります。
    upとdownメソッドは、migrateを実行した時の処理と、rollbackした時の処理を定義します。upで変更したものは、downで元に戻るようにしておかないと、正しくrollbackできません。 changeメソッドは、migrateを実行した時の処理を定義します。up/downと違うところは、rollback時の処理を勝手に反転して実行してくれるところです。 ですので、changeメソッドはrollback時の処理を書く必要はありません。 ここで気をつけて欲しいのはデータ削除をmigrateしたものをchangeメソッドが書かれている状態でrollbackするとカラムの情報がなくrollbackできません。だからchangeメソッドにできなくてup/downでできることもあるということも知っておいてください。 では実際のコードを確認して行きましょう。以下migrationsファイルで

    public function change()
    {
        $table = $this->table('shop_orders');
        $table->addColumn('goods_type', 'string', [
            'default' => null,
            'null' => false,
        ]);
        $table->create();
    }

これでmigrationsを行うとidとgoods_typeのカラムのあるデータテーブルが出来上がります。 さらにカラムに初期値を入れておきたいなら

        $this->execute('INSERT INTO shop_orders (goods_type) VALUES ("vegetable")') ;
        $this->execute('INSERT INTO shop_orders (goods_type) VALUES ("beverage")') ;

などで登録しておけばgoods_typeのid=1の時にvegetableに分類されます。

  • migrateを実行

    ここまででデータテーブルの外枠だけ形成してきました。この新たなテーブルをDBに反映するためにすることが、migrationです。 先ほどのようにvagrantssh接続して、

[vagrant@localhost ディレクトリ名]$ bin/cake migrations migrate

を実行すれば、DBにも反映されます。
実際はここからmodel定義をしたいところですが、それはまた別の機会に