Yii2でMaterial Design Liteを使う

Bootstrapって便利ですよね
でも、たまには違うデザインテンプレートを使いたい気持ちに駆られることがあります。
そんなときにちょっと試してみたのが、
Googleが作ってるMDL(Material Design Lite)
これをYii2で使うための設定をメモ

まずはnode.jsをインストール

brew install node.js

バージョンを確認

node -v

続いてbowerのインストール

node install bower -g

バージョンを確認

bower -v

Yii2がインストールされているディレクトリへ移動

cd yii

Material Design Liteをインストール

bower install material-design-lite --save

vendor/bower/material-design-liteがあることを確認

yii/vendor/yiisoft/yii2/web/JqueryAsset.php
を元に該当箇所をMaterialDesignLiteに適した形で修正し、
MaterialDesignLiteAsset.phpを作成

frontend/assets/AppAsset.phpに

public $depends = [
    'yii\web\MaterialDesignLiteAsset',
];

追記

これでfrontend側でMDLが呼び出されるようになった。
backendで使う場合はbackend/assets/AppAsset.phpに
上記frontendと同じ設定でOK

Yii2のDB Migrationを使ってテーブル作成 その3 -batch insert-

Yii2のDB Migration最終回!
最後はデータのinsertを行います。
データを1つずつinsertしてもいいんですが、
通常1つだけデータをinsertするってことはないので、
初めからBatch Insertを行います。
通常のSQLでいうバルクインサートです。
記述方法は

     $columns = array('id',
       'title',
       'content',
       'sub_table_id'
     );
     $values = array(
       array(1,
         'Title1',
         'これは1つ目',
         1,
       ),
       array(2,
         'Title2',
         'これは2つ目',
         1,
       ),
     );
     $this->batchInsert('tablename', $columns, $values);

をその2で作成したファイルに追記

<?php

use yii\db\Schema;
use yii\db\Migration;

class m150620_123401_create_tablename_table extends Migration
{
    public function up()
    {
        $this->createTable('tablename', [
            'id' => Schema::TYPE_PK,
            'title' => Schema::TYPE_STRING . ' NOT NULL',
            'content' => Schema::TYPE_TEXT,
            'sub_table_id' => Schema::TYPE_INTEGER,
        ]);
        $this->addForeignKey('fkey_tablename_sub_table_id', 'sub_table', 'sub_table_id', 'sub_table','id');
        $this->createIndex('tablename_title_index', 'tablename', 'title');
     //データinsert
     $columns = array('id',
       'title',
       'content',
       'sub_table_id'
     );
     $values = array(
       array(1,
         'Title1',
         'これは1つ目',
         1,
       ),
       array(2,
         'Title2',
         'これは2つ目',
         1,
       ),
     );
     $this->batchInsert('tablename', $columns, $values);
    }

    public function down()
    {
        $this->dropTable('tablename');
    }
}

これで初期テーブル作成コマンド用のファイルの準備が完了しました。
あとは下記を実行すると・・・

yii migrate/to m150620_123401_create_tablename_table

テーブルが作成されて、外部キー制約、インデックス、データまで準備されちゃてます!
しかも、このファイルでDB作成用のSQLは不要!
いやー便利便利。

Yii2のDB Migrationを使ってテーブル作成 その2 -index,外部キー制約-

Yii2のDB Migrationのその2。
今回はindexの貼り方、外部キー制約の設定、データ投入を行う。
前回の記事で作成した
m150620_123401_create_tablename_table.phpというファイルを触っていきます。

<?php

use yii\db\Schema;
use yii\db\Migration;

class m150620_123401_create_tablename_table extends Migration
{
    public function up()
    {
        $this->createTable('tablename', [
            'id' => Schema::TYPE_PK,
            'title' => Schema::TYPE_STRING . ' NOT NULL',
            'content' => Schema::TYPE_TEXT,
            'sub_table_id' => Schema::TYPE_INTEGER,
        ]);
    }

    public function down()
    {
        $this->dropTable('tablename');
    }
}

現在は上記のようにテーブルの作成と削除だけが設定されています。
まずは外部キー制約の設定を行います。
外部キー制約で使うカラムsub_table_idを追加しています。
今回の例ではsub_tableのidを対象に設定します。

$this->addForeignKey('fkey_tablename_sub_table_id', 'tablename', 'sub_table_id', 'sub_table','id');

外部制約キーの名前(任意)、自身のテーブル名、自身のカラム、制約対象テーブル名、制約対象カラムの順に記載します。
この一文をcreateTableの下に追記します。

<?php

use yii\db\Schema;
use yii\db\Migration;

class m150620_123401_create_tablename_table extends Migration
{
    public function up()
    {
        $this->createTable('tablename', [
            'id' => Schema::TYPE_PK,
            'title' => Schema::TYPE_STRING . ' NOT NULL',
            'content' => Schema::TYPE_TEXT,
            'sub_table_id' => Schema::TYPE_INTEGER,
        ]);
        $this->addForeignKey('fkey_tablename_sub_table_id', 'sub_table', 'sub_table_id', 'sub_table','id');
    }

    public function down()
    {
        $this->dropTable('tablename');
    }
}

次にtitleにindexを貼ってみましょう。

$this->createIndex('tablename_title_index', 'tablename', 'title');

indexの名前(任意)、テーブル名、対象のカラムの順に記載します。
この一文をcreateTableの下に追記します。

<?php

use yii\db\Schema;
use yii\db\Migration;

class m150620_123401_create_tablename_table extends Migration
{
    public function up()
    {
        $this->createTable('tablename', [
            'id' => Schema::TYPE_PK,
            'title' => Schema::TYPE_STRING . ' NOT NULL',
            'content' => Schema::TYPE_TEXT,
            'sub_table_id' => Schema::TYPE_INTEGER,
        ]);
        $this->addForeignKey('fkey_tablename_sub_table_id', 'sub_table', 'sub_table_id', 'sub_table','id');
        $this->createIndex('tablename_title_index', 'tablename', 'title');
    }

    public function down()
    {
        $this->dropTable('tablename');
    }
}

これでindexが作成されます。

Yii2のDB Migrationを使ってテーブル作成 その1 -createTable-

最近Yii2を触っているので遊びながらやったことをメモ。

Yii2でサイト構築する際にまず行うこと・・・
DBのテーブル作成を行う人が多いと思います。
SQLをバージョン管理してもいいんですが、
折角なのでDB Migrationを使ってコンソールからコマンド叩いてテーブルを構築します。
※DBは作成済みでyiiコマンドを実行出来る状況になっていることが前提

yii migrate/create create_tablename_table

上記コマンドを実行すると
m150620_123401_create_tablename_table.phpというファイルが
@app/migrations以下に作成されます。
ファイル名は作成日時を使って

m<YYMMDD_HHMMSS>_<Name>.php

となってます。
このファイルを開いてみると

<?php

use yii\db\Schema;
use yii\db\Migration;

class m150620_123401_create_tablename_table extends Migration
{
    public function up()
    {
    }

    public function down()
    {
        echo "m150620_123401_create_tablename_table cannot be reverted.\n";
        return false;
    }
}

このファイルを修正していきます。

<?php

use yii\db\Schema;
use yii\db\Migration;

class m150620_123401_create_tablename_table extends Migration
{
    public function up()
    {
        $this->createTable('tablename', [
            'id' => Schema::TYPE_PK,
            'title' => Schema::TYPE_STRING . ' NOT NULL',
            'content' => Schema::TYPE_TEXT,
        ]);
    }

    public function down()
    {
        $this->dropTable('tablename');
    }
}

これだけです。
up()がテーブル作成時に使用されるfunction
down()がテーブル削除時に使用されるfunctionになっています。

テーブルを作成するにはコンソールから

yii migrate/to m150620_123401_create_tablename_table

これでtablenameっていうテーブルが作成されます。
カラムはidがプライマルキー、titleがSTRINGでNOT NULL、contentがtextになっています。

テーブルを削除するにはコンソールから

yii migrate/down

このコマンドで最も最近作成されたテーブルが削除されます。
ちなみにこのコマンド実行するとどのテーブルを削除するか確認する画面が出てくるので、
削除対象のテーブルを確認してから削除を実行出来ます。