laravel

Eloquentでのデータ検索と更新の基本的なやり方

今回はEloquentを使ったデータの検索、登録、更新の基本的な使い方について紹介します。

1.全件抽出

allメソッドはテーブルの全レコードを取得するメソッドです。

戻り値はcollectionクラスのインスタンスが返されます。

collectionの要素はforeach文を使って1レコードずつ取り出すことができます。

use App\Author;
$authors=Author::all();

// nameのカラムを出力
foreach ($authors as $author){
    echo $author->name;
}

// 実行結果
// 著者名1
// 著者名2
// 著者名3
// 著者名4
// 著者名5
// 著者名6
// 著者名7
// 著者名8
// 著者名9

アイテム数のカウントや条件に合致したアイテムのみを返却する機能もあります。

// レコード数を取得
$count = $authors->count();
echo $count;

// 結果
9

filterメソッドを使って絞り込むことも可能です。

$authors=Author::all();

//idが5より大きい著者を抽出
$filtered_authors = $authors->filter(function ($author) {
    return $author->id > 5;
});

foreach ($filtered_authors as $author){
    echo $author->name;
}

// 結果
// 著者名6
// 著者名7
// 著者名8
// 著者名9

2.プライマリーキーによる抽出

引数にプライマリーキーを指定して合致するレコードを取得できます。

// id=5のレコードを取得
$author=Author::find(5);
echo $author->name;

//結果
//著者名5

またfindOrFailメソッドを使うと該当するレコードが存在しない場合はModelNotFoundExceptionを投げます。

authorのidが10のユーザーが存在しないのでエラーとなります。

use Illuminate\Database\Eloquent\ModelNotFoundException;

try{
    // うまくいった時の処理 *今回はid=10は存在しない
    $author = Author::findOrFail(10);
} catch(ModelNotFoundException $e) {
    // エラーの時の処理
    echo $e->getMessage();
}

// 結果
// No query results for model [App\Author] 10

3.条件指定による抽出

whereXXXメソッドはSQLのwhere句に相当する条件を引数に指定して絞り込みができます。

「XXX」の部分にテーブルのカラム名が入ります。

// nameカラムが著者名4のレコードを検索
$author=Author::whereName('著者名4')->get();

$keys = ['id','name','kana'];
foreach ($keys as $key) {
    echo $author->first()->$key;
}

// 結果
//4
//著者名4
//チョシャメイ4

4.新しいレコードの登録

createメソッドもしくはsaveメソッドを利用して登録します。

// createメソッドを利用したデータ登録
$author = new Author();
$author->name = '著者B';
$author->kana = 'チョシャB';
$author->save();

// saveメソッドを利用したデータ登録
$author = new Author();
$author->name = '著者B';
$author->kana = 'チョシャB';
$author->save();

5.データ更新

データ更新は更新対象のインスタンスに対してプロパティ値を設定してupdateメソッドを使って更新できます。

// id=1のユーザーを変更
$author = Author::find(1)->update(['name'=>'著者B','kana'=>'チョシャB']);

またsaveメソッドを用いて変更することも可能です。

// id=1のユーザーを変更
$author = Author::find(1);
$author->name='著者B';
$author->kana='チョシャB';
$author->save();

6.データ削除

データ削除は削除対象のインスタンスに対してdeleteメソッドを使用して削除されます。

この場合は物理削除されます。

// id=1が削除
$author = Author::find(1);
$author->delete();

削除対象のプライマリーキーがわかっている場合はdestroyメソッドを使った削除が可能です。

//id=1を削除
Author::destroy(1);
//id=1,3,5を削除
Author::destroy([1,3,5]);
//以下でも動作します
Author::destroy(1,3,5);

参考文献

公式

https://laravel.com/docs/6.x/eloquent

https://laravel.com/docs/6.x/collection

Laravel6におけるEloquentの基本的な使い方については以上です。