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.

Chapter6 Eloquentの基本(6-1)

Posted at

ORMとは?

PHPとデータベースのレコードは基本的な仕組みが異なるので、
データベースのレコードをPHPの変数に入れるとなると、
「とりあえず、レコードは全部連想配列にまとめてしまえ」となるのはやむを得ない。

そこで、PHPのオブジェクトとデータベースの間の、
橋渡しをしてくれる仕組みが 「ORM」 と呼ばれる機能です。

「ORM」 = Object Relational Mapping

Eloquentとモデル

Laravelには「Eloquent(エロクアント)」というORMが用意されています。

「モデル」のクラスを定義し、これを利用してデータベース操作を行えるように
設計されています。

モデルは、「テーブルの内容を定義したクラス」です。

モデルを作成する

モデル作成するphp arisanコマンドを使用する。

 % php artisan make:model Person

<注意事項>

*Laravelでは、「テーブル名は複数形、モデルは単数形」という命名規則がある。

PersonController.phpを作成する

コントローラを作成するphp artisanコマンドを使用する。

 % php artisan make:controller PersonController

ルート情報に記述する

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

Personモデルで全レコードを得る

sample.php
$items = Person::all();

上記の記述で、全レコードを取得することができます。
取得されたレコードは、「Illuminate\Database\Eloquent」名前空間の
Collectionクラスのインスタンスとして得られます。

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

DBクラスと決定的に違うのは、
「コレクションにまとめられているのは、配列ではなく、モデルクラスのインスタンスである」という点です。

1つ1つのレコードは全てPersonクラスのインスタンスとしてまとめられています。

Personクラスの拡張

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

@section('title','Person.index')

@section('menubar')
    @parent
    インデックスページ
@endsection

@section('content')

    <table>
        <tr><th>Name</th></tr>

        @foreach($items as $item)
            <tr>
                <td>{{$item->getData()}}</td>
            </tr>
        @endforeach

    </table>

@endsection

@section('footer')
    copyright 2020 tuyano.
@endsection

IDによる検索

$変数 = モデルクラス :: find( 変数 );

findは、そのようにモデルクラスの静的メソッドとして呼び出します。
引数には検索するID番号を指定します。

<注意点>
Eloquentでは、
「デーブルのプライマリキーはidという整数値のフィールドである」という前提でfindは実行します。

検索用のテンプレートページを作る

find.php
@extends('layouts.helloapp')

@section('title','Person.find')

@section('menubar')
    @parent
    検索ページ
@endsection

@section('content')

    <form action="/person/find" method="post">
        @csrf
        <input type="text" name="input" value="{{$input}}">
        <input type="submit" value="find">
    </form>
    @if (isset($item))
        <table>
            <tr><th>Data</th></tr>
            <tr>
                <td>{{$item->getData()}}</td>
            </tr>
        </table>
    @endif

@endsection

@section('footer')
    copyright 2020 tuyano.
@endsection

PersonController.phpの修正

PersonController.php
class PersonController extends Controller
{
    public function index(Request $request)
    {
        $items = Person::all();

        return view('person.index', ['items' => $items]);
    }

    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);
    }
}

ルート情報の追加

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

findは、/findにGETアクセスした時の処理、
searchは、POST送信された時の処理です。

sample.php
$item = Person::find($request->input);

上記の記述で、$itemには、検索されたPersonインスタンスが代入されます。

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?