# laravelのORMとMIGRATEを触ってみた。
とりあえずは、公式のチュートリアルを参考に
-> http://laravel.com/docs/quick
まずは、Mysqlに対してのMIGRATEなど
テーブルを作成してみよう
プロジェクトディレクトリ以下まで移動してから、色々やっていきます。
php artisan migrate:make create_users_table
create_users_tableってクラスのファイルを作る!
app/database/migrations以下にファイルが
$ ls -la app/database/migrations drwxr-xr-x 2 schoo wheel 4096 Jan 30 14:36 . drwxr-xr-x 4 schoo wheel 4096 Jan 29 17:36 .. -rw-r--r-- 1 schoo wheel 0 Jan 29 17:36 .gitkeep -rw-r--r-- 1 root root 598 Jan 30 14:27 2014_01_29_164142_create_users_table.php
年月日と時間がファイル名の先頭についてる
早速編集してみます
<?php use Illuminate\Database\Migrations\Migration; class CreateUsersTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('users', function($table) { $table->increments('id'); $table->string('email')->unique(); $table->string('name'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::drop('users'); } }
upにはmigrate実行時に走る処理を downにはrollback時に走る処理を
準備が出来たので、早速実行してみます。
$ php artisan migrate
完了したので、mysqlを確認してみます。
mysql> desc users; +------------+------------------+------+-----+---------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+------------------+------+-----+---------------------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | email | varchar(255) | NO | UNI | NULL | | | name | varchar(255) | NO | | NULL | | | created_at | timestamp | NO | | 0000-00-00 00:00:00 | | | updated_at | timestamp | NO | | 0000-00-00 00:00:00 | | +------------+------------------+------+-----+---------------------+----------------+
お、できてる!
カラム追加してみよう
次は、カラムの追加をしてみます。
$ php artisan migrate:make modify_users_table
今回もapp/database/migrations以下にファイルができています。 僕の場合は、2014_01_30_052837_modify_users_table.php
早速編集
public function up() { Schema::table('users', function($table) { $table->string('company'); }); // } public function down() { // }
usersテーブルに、varcharでcompanyを作成する。
$ php artisan migrate
mysql> desc users; +------------+------------------+------+-----+---------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+------------------+------+-----+---------------------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | email | varchar(255) | NO | UNI | NULL | | | name | varchar(255) | NO | | NULL | | | created_at | timestamp | NO | | 0000-00-00 00:00:00 | | | updated_at | timestamp | NO | | 0000-00-00 00:00:00 | | | company | varchar(255) | NO | | NULL | | +------------+------------------+------+-----+---------------------+----------------+
追加された。
消してみよう
最後は、消してみてみましょう
$ php artisan migrate:make delete_company_users_table
今回もapp/database/migrations以下にファイルができています。 僕の場合は、2014_01_30_053153_delete_company_users_table.php
早速編集
public function up() { Schema::table('users', function($table) { $table->dropColumn('company'); }); // } public function down() { Schema::table('users', function($table) { $table->string('company'); }); // }
実行
$ php artisan migrate
確認
mysql> desc users; +------------+------------------+------+-----+---------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+------------------+------+-----+---------------------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | email | varchar(255) | NO | UNI | NULL | | | name | varchar(255) | NO | | NULL | | | created_at | timestamp | NO | | 0000-00-00 00:00:00 | | | updated_at | timestamp | NO | | 0000-00-00 00:00:00 | | +------------+------------------+------+-----+---------------------+----------------+
結構使い勝手がいいかんじです!
そのたコマンド
http://laravel.com/docs/schema
次はORM
実は、上の手順を全て行っていると app/models/User.php
というファイルが作成されていますので、今回は Controller、View、Routeファイルだけ触ります。
Controllerを作ってみる
app/controllers/UserController.php
<?php class UserController extends BaseController { public function showUsers() { //users全件取得 $users = User::all(); //usersという名前で、view tenplateに渡しますよ return View::make('users')->with('users', $users); } }
これだけです。
次は、viewテンプレート
今回の内容では、不要ですがレイアウトファイルを作ります
$ vim app/views/layout.blade.php <html> <body> <h1>Laravel Quickstart</h1> @yield('content') </body> </html>
レイアウトファイル、テンプレートの使い方に関しては、今回は省略(というより、調べてない。。)
次テンプレート
$ vim app/views/users.blade.php @extends('layout') @section('content') @foreach($users as $user) <p>{{ $user->name }} {{ $user->email }}</p> @endforeach @stop
レイアウトに、contentセクションにforeachなどなど展開する。 foreachの箇所で、Controllerで定義したusersを使用しています。 これでテンプレートも完了
あとは、リクエストに対応する為、routeファイルを編集するだけ
$ vim app/routes.php Route::get('users', 'UserController@showUsers');
これであとは、ブラウザから http://....../usersとアクセスするそれだけ
ORMもDBMIGRATEも複雑な手順踏まなくていいという分いいかもしれない あとは、キャッシュとか色々調べてからになるけど