Modelとは何か?
Databaseのデータを操作する機能のこと。
DBのテーブルに対応するモデルがあり、コントローラでそのモデルを操作するとDBに書き込むデータを指定したりできる。
参考:steemit.com
ModelとDBテーブルの関連付け
DBの各テーブル毎に対応するモデルを作成する。
テーブル名とモデル名の命名規則を守れば、laravelが自動で対応してくれる。
命名規則
DBのテーブル名は複数形とし、Model名はその単数形とする。
・DBのテーブル名: 複数形のスネークケース
・対応するModel名: 冒頭大文字のキャメルケース
<例1>
・DBのテーブル名: articles
・対応するModel名: Article
<例2>
・DBのテーブル名: maker_codes
・対応するModel名: MakerCode
(補足)テーブル名の主な命名規則
DBのテーブル名には命名規則がある。
- 複数形
- スネークケース
- 省略表記しない
テーブル名(例) | 判定 |
---|---|
articles | ○ |
article | × |
Article | × |
maker_codes | ○ |
MakerCodes | × |
maker_code | × |
mk_code | × |
マイグレーションとは何か?
DBに関連する機能でマイグレーションがある。
マイグレーション(migration)は移行という意味で、ここではDBの構造をLaravelに移行し連動させている。
マイグレーションとモデルの違い
どちらもDBを操作するが、操作対象が異なる。
マイグレーションは、列(カラム)の追加や削除、型の指定を行う。
モデルはDBからデータの取り出し処理を記述する。(Eloquentでクエリを投げる)
▼マイグレーション
- カラムの作成・削除
- 型の指定
- バージョン管理(過去のテーブルの構造がわかる)
- 保存場所: app > Models
- ファイル名はタイムスタンプ & テーブル名
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id'); //idカラム
$table->string('name'); //nameカラム
$table->string('email')->unique(); //emailカラム
$table->timestamps(); //タイムスタンプカラム
});
}
マイグレーションファイルに追加したいカラムを記述し、マイグレーションを実行すれば、連携するモデルとDBのテーブルにカラムが追加される。
▼ディレクトリ構造
▼モデル
- 取得するデータを指定
- 取得するデータのフォーマットを指定
- 保存場所: app > database > migrations
- ファイル名がテーブルと対応
class User extends Model
{
$user = User::find(1); // id番号1のユーザー情報を取得
$user->email; // users.email の値を取得
}
▼ディレクトリ構造
Eloquentとは?
LaravelのModelやMigrationなど、DBについて調べていると必ずEloquent(エロクアント)という用語が出てくる。
Eloquentというのは、LaravelでDBを操作するコマンドのこと。
EloquentにはDB操作するためのメソッドが用意されており、それらをモデルやコントローラに記述することでDB操作が実行できる。
▼使い方
・名前空間::Eloquentメソッド名
use App\Models\User; //対象のテーブルのモデルのuse宣言
$user = User::all()->toArray();
usersテーブルからすべてのデータを抽出し配列化したものを、変数userに格納。
主なEloquentのメソッド
実例はusersテーブル(Userモデル)に対して操作する場合。
use App\Models\User;
メソッド | 内容 | 実例 |
---|---|---|
all() | すべてのデータを抽出 | $names = User::all() |
find(int) | 指定したid番号のレコードを抽出 | $user1 = User::find([10, 20, 30]); |
get() | 結果を取得する | $data = User::orderBy(‘created_at’)->get(); |
where(‘フィールド名’, 条件) | 指定したフィールド名のカラムから条件に一致するものを抽出 | $data = User::where(‘id’,1)->get() |
where(‘フィールド名’, ‘不等号’ ,条件) | 指定フィールドで条件を満たすものを抽出 | $data = User::where(‘id’,’>=’, 10)->get() |
toArray() | 配列に変換する | $arr = User::all()->toArray() |
findOrFail | 条件に一致しない場合、例外処理をする | User::findOrFial(1) |
count() | 数を数える | $count = User::::where(‘active’, 1)->count(); |
max(‘フィールド名’) | 最大値を取得する | $maxNum = User::max(‘id’); |
sum(‘フィールド名’) | 合計値を取得する | $totalPrice = User::sum(‘price’); |
基本的に一般に使えるメソッドは、Eloquentでも使える。
Eloquentでも使えるメソッド一覧
・Laravel公式 Eloquentコレクション
・Laravel公式 Eloquent実例
クエリビルダとは?
LaravelでDBを操作するコードは、Eloquent以外にクエリビルダという方法もある。
▼クエリビルダの使い方
use Illuminate\Support\Facades\DB;
$変数名 = DB::table('フィールド名')->メソッド->get();
クエリビルダを使うには、DBファサードのtableメソッドを使う。
これはEloquentのuse 名前空間
と同じ。
実際、Eloquentはクエリビルダで使えるすべてのメソッドを使用できる。
Eloquentモデルはクエリビルダですから、クエリビルダで使用できる全メソッドを確認しておくべきでしょう。Eloquentクエリでどんなメソッドも使用できます。