Laravel学習帳

Laravel5.2の学習帳です。開発環境はXAMPP for Windows 5.6.19 / 本番環境はさくらサーバー(スタンダード)

基礎知識

DBの操作について(Eloquent)~基本~

LaravelでDBを操作するには二つやり方があります。

・DBファサード
・Eloquent(エロクアント)

今回は Eloquent についてエントリーします。

【 解説 】
Eloquent の読み方については Laravel Meetup Tokyo vol.3 で決まりました。

 

Eloquentモデルとは

DBとモデルを対応づける機能を Eloquent と呼びます。

Eloquent は最初にモデル(Eloquentモデル)を作成する必要があります。

Eloquentモデルの作成は artisanコマンドで用意されています。

 
例)Employee という名前でモデルを作成

php artisan make:model Employee

コマンドを実行すると app ディレクトリ直下にモデルファイルが作成されます。

【 注意 】
実践ではappディレクトリ直下にモデルを置くことは少ないです。
app/Models にモデルを置き、まとまりとして置くことが多いです。
この場合は以下のコマンドになります。

php artisan make:model Models/Employee

artisanコマンドで生成されたモデルを開いてみます。

<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class Employee extends Model {
  //
}

Eloquent の Model を継承しているだけで、中身がないスケルトンが作成されます。

ただこのままではテーブルのカラムにガードがかかっています。

データを挿入してもいいカラムはここで宣言してあげます。

 
例)「dept_id」「name」「email」のカラムにデータを挿入できるようにする

<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class Employee extends Model {
  protected $fillable = ['dept_id', 'name', 'email']; #←fillableで宣言
}

これでDBにデータを挿入することが可能になります。

【 Eloquentモデルでよく利用されるプロパティ 】

プロパティ 説明 規定値
$connection どのDB接続するのか。onメソッドで動的に変更可
$table どのtableに対して処理するのか (モデル名の複数形)
$timestamps テーブルの作成、更新日時を自動更新 true
$fillable 渡した属性を複数代入させるかどうか(columnに値を入れたい場合必須) null
$guarded 複数代入させないcolumnの指定($fillableと対) [*] 全てのcolumnが複数代入できない

 

Eloquent ORM

ORMとはPHPなどのオブジェクトとデータベースのデータの間をマッピング(関連づける)する技術です。

これにより、PHPファイル上でSQLを書かなくてよくなります。

Eloquent ORM はモデルやコントローラ(※原則モデル)に記述します。

 
例)「Employee」のテーブルを全て表示させる

:
  public function select(){
  $employees = Employee::all();
  return view('select')->with('employees',$employees);
  }
:

上記で記述した Eloquent ORM を View で表示するにはこんな感じで blade ファイルに記述します。

:
<h3>従業員リスト</h3>
@foreach($employees as $employee)
  {{$employee->name." ".$employee->email}}<br>
@endforeach
:
【 よく利用されるEloquent ORM 】

メソッド 用法 記述例
all() 全モデルを取得する $users = User::all();
find() 主キーで1レコードを取得する $user = User::find(1);
findOrFail() 主キーでモデルを取得するか、例外を投げる $user = User::findOrFail(1);
where() SQL条件式 $model = User::where('votes', '>', 100)->firstOrFail();
save() データ挿入
$user = new User();
$user->name = 'yamada';
$user->save();
save() データ更新
$user = User::find(5);
$user->old = 22;
$user->save;
create() データ新規作成
User::create([
'name' => 'yamada',
'old' => 22
]);

上記で記述したEloquent ORMをView で表示するにはこんな感じでbladeファイルに記述します。

:
<h3>従業員リスト</h3>
@foreach($employees as $employee)
  {{$employee->name." ".$employee->email}}<br>
@endforeach
:

 

チュートリアル

前回、シーダーファイルを使ってサンプルデータを「employees」テーブルに挿入しました。

シーダーについて(応用)

今回はこのデータを View で一覧表示させてみます。

 

手順

1)モデルの作成
2)カラムの宣言
3)コントローラの作成
4)ビューの作成
5)ルーティングの設定
6)動作確認

 

1)モデルの作成

artisanコマンドを実行

php artisan make:model Employee

 

2)カラムの宣言

:
public $timestamps = false; //timesatampを利用しない
protected $fillable = ['dept_id', 'name', 'email'];
:

 

3)コントローラの作成

artisanコマンドでコントローラのスケルトンを作成。

php artisan make:controller EmployeeController

EmployeeControllerにEloquent ORMを記述します。

:
  public function select(){
  $employees = \App\Employee::all();
  return view('employee.list')->with('employees',$employees);
  }
:
【 注意 】
一覧ページのメソッド名は list() だとわかりやすいですよね。
しかし予約語(PHPで既に定義済み)なのでNGです。

 

4)ビューの作成

<h3>従業員リスト</h3>
@foreach($employees as $employee)
  {{$employee->name." ".$employee->email}}<br>
@endforeach

 

5)ルーティングの設定

Route::get('employee/list','EmployeeController@select');

 

6)動作確認

http://{ホスト}/employee/list

上記のように表示されればOKです。

EloquentにおけるDB操作については以上です。

 

-基礎知識