Laravelにおけるモデルの使い方を紹介します。
モデルを作成する
laravelにおいてモデルを作るのは簡単です。artisanコマンドを使って自動的に作ることができます。
わかりやすく、pokemonsテーブルがあるとしましょう。
php artisan make:model Pokemon
laravel8.xを使っている方であれば、app/Http/Models/Pokemon.phpができていると思います。
中身を確認したら、このモデルファイルがどのテーブルを操作するのかを指定するために、一行追加して下さい。
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class QuizType extends Model
{
use HasFactory;
protected $table = 'pokemons'; //ここを追加
}
こうすることでこのモデルファイルでpokemonsテーブルを操作することができます。
モデルを利用する
モデルを利用するためには利用したいphpファイルで以下のような文を追加して読み込んでおく必要があります。忘れないようにしておきましょう。
use App\Models\Pokemon;
Class XXX not found
以下のようなエラーが出てきたのであれば、上の分を追加し忘れていますよ。
Class "App\Http\Controllers\Pokemon" not found
モデルを使って1件取得する
1件を検索して取得するにはfind()メソッドが使えます。
引数にはプライマリーキーを指定します。
$pokemon = Pokemon::find(1);
上記のコードで、プライマリーキーが1であるデータを取得することができます。
他のテーブルと結合する(join)
他のテーブルと結合して情報を取得するには以下のようにします。
今回はポケモンのタイプIDがあるとして、タイプテーブルと結合したいときのことを考えます。
$pokemons = Pokemon::select('*')
->join('pokemon_type', 'pokemons.type_id', '=', 'pokemon_type.id')
->get();
他にもleftJoin(),rightJoin()などが同じ使い方で利用できます。
副問い合わせを行う
トレーナーテーブル(trainers)、持っているポケモンテーブル(trainers_own)があるとして、そのトレーナーが何匹のポケモンを持っているかを取得する想定です。
$own_num = DB::table('trainers_own')
->select('trainers_id', DB::raw('COUNT(*) as own_num'))
->groupBy('trainers_id');
$trainers = Trainers::select('*')
->joinSub($own_num, 'own', function ($join) {
$join->on('trainers.id', '=', 'own.trainers_id');
})
->get();