0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LaravelのEloquent ORMの使い方【個人的なお勉強アウトプット】

Last updated at Posted at 2022-04-06

参考図書

モデルファイル作成

php artisan make:model モデル名
app/Modelsの中にファイルが作成される。

命名規則

テーブル名は複数形、モデルは単数形。
これにしたがうことでテーブルとモデルを自動的に関連付けて動くようにする。

例)
テーブル名:people
モデル名:person

モデルファイル

app/Models/Person.php
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Person extends Model{

}

モデルクラスはIlluminate\Database\Eloquent名前空間にあるModelを継承したクラスとして作成される。

モデルの使い方

全件取得

コントローラーファイルを作成
php artisan make:controller PersonController

app/Http/Controllers/PersonController.php
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を作成

resources/views/person/index.blade.php
@extends('layouts.helloapp')

@section('content')
    @foreach ($items as $item)
        {{$item->name}}
        {{$item->mail}}
        {{$item->age}}
    @endforeach
@endsection

ルート情報を追加

routes/web.php
Route::get('person', 'App\Http\Controllers\PersonController@index');

Personクラスにメソッドを追加する

DBクラスと決定的に違うのは、コレクションにまとめられているのは、配列などではなく、モデルクラスのインスタンスである、という点。
上記の例でも、ひとつひとつのレコードはPersonクラスのインスタンスとしてまとめられている。
モデルクラスのインスタンスだから、クラスにプロパティやメソッドを追加することで独自に拡張することができる。

app/Models/Person.php
public function getData(){
return $this->id . ':' . $this->name . '(' . $this->age . ')';
}

ビューを編集

resources/views/person/index.blade.php
@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ページをつくる

resources/views/person/find.blade.php
@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

コントローラーの修正

app/Http/Controllers/PersonController.php
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メソッドを呼び出している。

ルート情報の追加

routes/web.php
Route::get('person/find', 'App\Http\Controllers\PersonController@find');
Route::post('person/find', 'App\Http\Controllers\PersonController@search');

findから検索したIDに対応するレコードが表示される。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?