LoginSignup
5
4

More than 5 years have passed since last update.

laraveのORM「eloquent」の設定、利用

Last updated at Posted at 2016-08-06

laravel5で顧客管理webアプリを作成したのでメモの続きです。

前提として、データベースの接続、マイグレーションの利用で説明した「.env」の利用データベースの設定が必要となります。

eloquentとは?

laravelで使用出来るORM(オブジェクト関係マッピング)です。通常phpでデータベースのテーブルを編集する場合は、sqlを用います。ですがそうすると、コード内にphpとsqlが混ざり可読性が損なわれてしまいます。そこで、ORMを使うとテーブルとの接続をまとめたクラスを作成し、そのメソッドを使うことでsqlを用いないレコード操作が可能となります。

eloquent使用の準備

モデルの作成

eloquentで使用するテーブルとの接続をまとめたものをモデルと言います。artisanで雛形を作成しましょう。

$ php artisan make:model モデル名

これでappの直下にモデル名.phpが作成されます。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class モデル名 extends Model
{
    //
}

テーブルとの紐付け

作成したモデルと使用するテーブルを紐付ける設定をします。
まず行うのは、テーブルの設定です。作成したモデルのclass内に下記を追加しましょう。

protected $table = 'テーブル名';

通常はこれだけで指定したテーブルの操作が可能となります。

その他設定

前述の紐付けだけではエラーとなる場合もあります。その理由としてよくあるのは
1. 主キーのカラム名
2. タイムスタンプの有無
です。

主キーのカラム名

eloquentでは通常テーブルの主キーを「id」として想定しています。そのため主キーが「id」以外の場合はエラーが発生します。

その場合はクラス内に

protected $primaryKey = ‘主キー名’;

を追加するとエラーが回避されます。

タイムスタンプの有無

eloquentでは自動的にレコードの追加、編集をした際にタイムスタンプ「created_at」と「updated_at」カラムを更新します。
もし上記のカラムがない場合はエラーが発生してしまうので、タイムスタンプの更新を無効にする

public $timestamps = false;

をモデル内に追加しましょう。

データベースの接続、マイグレーションの利用で作成したhistory_listテーブルのクラスは下記のようになります。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class History extends Model
{

//テーブルの指定
protected $table = 'history_list';

//プライマリーキーを設定
protected $primaryKey = ‘code’;

}

eloquentの利用

レコードの追加

レコードの追加はモデルのインスタンスを作成し行います。
ここではpatient_listテーブルにレコードを追加するため、Patientモデルを使用します。

$test_recode = App\Patient;

これで$test_recodeを編集することでPatientモデル(patient_listテーブル)へのレコードが追加できます。
それでは各カラム値にデータを入力します。

$インスタンス名->カラム名 = '入力値'

が雛形です。

今回は例として下記のように入力しました。

$test_recode->name1 = '山田 太郎';
$test_recode->name2 = 'やまだ たろう';
$test_recode->sex = '男性';
$test_recode->birthdate = '20160101';
$test_recode->phone_num = '01201111111';
$test_recode->zip = '1234567';
$test_recode->address = '東京都杉並区11';
$test_recode->ad = 'ホームページ';
$test_recode->experience = 'あり';
$test_recode->firstday = 'date';
$test_recode->memo = 'テストです';

これでインスタンスにデータが入力できたので、それをテーブルに反映sるためsaveメソッドを実行します。

$test_recode->save();

これでテーブルへのレコード挿入が完了です。
テーブル内のデータを呼び出すスタティックメソッドall()を利用し確認します。

App\Patient::all();

下記のように表示され

5
4
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
5
4