参考図書
モデルファイル作成
php artisan make:model モデル名
app/Modelsの中にファイルが作成される。
命名規則
テーブル名は複数形、モデルは単数形。
これにしたがうことでテーブルとモデルを自動的に関連付けて動くようにする。
例)
テーブル名:people
モデル名:person
モデルファイル
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Person extends Model{
}
モデルクラスはIlluminate\Database\Eloquent名前空間にあるModelを継承したクラスとして作成される。
モデルの使い方
全件取得
コントローラーファイルを作成
php artisan make:controller PersonController
namespace App\Http\Controllers;
use App\Models\Person;
use Illuminate\Http\Request;
class PersonController extends Controller{
public function index(Request $request){
$items = Person::all();
return view('person.index', ['items' => $items]);
}
}
Personクラスのallメソッドで全レコードを取得できる。
取得されたレコードは、Illuminate\Database\Eloquent名前空間のCollectionクラスのインスタンスとして得られる。これはレコード管理専用のコレクションクラス。
一般的なコレクションと同様、foreachなどを使い順に値を取り出して処理できる。
index.blade.phpを作成
@extends('layouts.helloapp')
@section('content')
@foreach ($items as $item)
{{$item->name}}
{{$item->mail}}
{{$item->age}}
@endforeach
@endsection
ルート情報を追加
Route::get('person', 'App\Http\Controllers\PersonController@index');
Personクラスにメソッドを追加する
DBクラスと決定的に違うのは、コレクションにまとめられているのは、配列などではなく、モデルクラスのインスタンスである、という点。
上記の例でも、ひとつひとつのレコードはPersonクラスのインスタンスとしてまとめられている。
モデルクラスのインスタンスだから、クラスにプロパティやメソッドを追加することで独自に拡張することができる。
public function getData(){
return $this->id . ':' . $this->name . '(' . $this->age . ')';
}
ビューを編集
@extends('layouts.helloapp')
@section('content')
{{$item->getData()}}
@endsection
IDによる検索
$変数 = モデルクラス::find(整数);
findはモデルクラスの静的メソッドとして呼び出す。
静的(スタティック)メソッドとは
クラスに対して呼び出し、どこで呼び出しても同じ処理を行う
静的メソッドの中では$this
は使えない。
self::
でスタティックプロパティにアクセスすることはできる
https://prograshi.com/language/php/php-static-vs-instance/
findはテーブルのプライマリキーはidという整数値のフィールドであることを前提としている。
findアクションをつくる
検索用ページのfindページをつくる
@extends('layouts.helloapp')
@section('content')
<form actioon="/person/find" method="post">
@csrf
<input type="text" name="input" method="post">
<input type="submit" value="find">
</form>
@if(isset($item))
{{$item->getData()}}
@endsection
コントローラーの修正
public function find(Request $request){
return view('person.find',['input' => '']);
}
public function search(Request $request){
$item = Person::find($request->input);
$param = ['input' => $request->input, 'item' => $item];
return view('person.find', $param);
}
findは/findにGETアクセスしたときの処理、searchはPOST送信されたときの処理。
searchは送信されたinputフィールドの値を引数に渡してfindメソッドを呼び出している。
ルート情報の追加
Route::get('person/find', 'App\Http\Controllers\PersonController@find');
Route::post('person/find', 'App\Http\Controllers\PersonController@search');
findから検索したIDに対応するレコードが表示される。