モデルとは
Laravelのモデルは、データベースのテーブルと対応するクラスです。
モデルを使うことで、テーブル内のデータをオブジェクトとして扱うことができ、データベース操作が簡単に行うことができます。
モデルでできる機能
スコープの設定
スコープを使用すると、特定のクエリ条件を定義し、それを複数の場所で再利用できます。
これにより、コードの再利用性が向上し、クエリの可読性が向上します。
例えば、あるモデルがアクティブなユーザーのみを取得するようにしたい場合、スコープを使用して次のように定義できます。
// モデルクラスの記述
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
// アクティブなユーザーのみを取得するスコープ
public function scopeActive($query)
{
return $query->where('active', true);
}
}
この例では、active カラムが true のユーザーのみを取得する active という名前のスコープが定義されています。
スコープを使用してクエリを呼び出すには、次のようにします。
// コントローラーなどの場所での使用例
$activeUsers = User::active()->get();
このようにすることで、User::active() で定義した条件が適用されたクエリを実行し、アクティブなユーザーのみが取得されます。
リレーションシップを貼れる
リレーションシップを設定することで、異なるテーブル間のデータを簡単に結びつけ、効率的に操作できるようになります。
下記でリレーションの貼り方の例を紹介します。
一対一(One-to-One)
One to Oneリレーションは、一つのレコードが別のレコードと直接関連付けられる場合に使用します。
// モデルクラスの記述
class Post extends Model
{
public function user()
{
return $this->hasOne(User::class);
}
}
一対多(One-to-Many)
One to Manyリレーションは、一つのレコードが複数のレコードと関連付けられる場合に使用します。
// モデルクラスの記述
class User extends Model
{
public function posts()
{
return $this->hasMany(Post::class);
}
}
アクセサ
データをデータベースから取得する時に実行する処理を設定できます。
ミュータ
データをデータベースへ保存する時に実行する処理を設定できます。
モデル自体が持っているメソッドを使える
Laravelのモデルは、データベースのテーブルにアクセスするための便利なメソッドを多く持っています。以下に、いくつかの一般的なモデルメソッドを挙げます。
// 指定されたIDに対応するレコードを取得します。
User::find($id)
// モデルに関連するすべてのレコードを取得します。
User::all()
// 新しいレコードをデータベースに作成します。引数には属性の配列を渡します。
User::create(array $attributes)
// クエリの条件として指定された条件に一致するレコードを取得します。
User::where($column, $operator, $value)
// Eager Loadingを使用して、関連するモデルのプリロードを行います。
User::with($relations)
// モデルの変更をデータベースに保存します。新しいモデルの場合は新しいレコードが作成され、既存のモデルの場合は更新されます。
User::save()
独自メソッドの定義
Laravelのモデルに独自のメソッドを定義し、それをコントローラーから呼び出すことができます。これにより、モデルのロジックをより効果的に組織化し、再利用可能なコードを作成できます。
「独自メソッド」と「アクセサ」との違いについて
個人的に「独自メソッド」と「アクセサ」の違いが分かりづらかったので、ここで比較してまとめます。
Laravelで独自のメソッドとアクセサの違いは、それらが異なる目的を持つ点にあります。
独自のメソッドはモデルに関連するロジックや操作を定義するためのものであり、アクセサはモデルの属性の値を取得する際に加工したり変換したりするためのものです。それらは異なる目的を持ち、異なるタイミングで使用されます。
独自のメソッド
・モデルに独自のメソッドを定義することで、特定の処理や操作を行うことができます。これは、通常のPHPメソッドと同様に、モデルクラス内に定義されます。
・独自のメソッドは、モデルの振る舞いをカスタマイズしたり、モデルに関連するビジネスロジックを実装したりするために使用されます。例えば、データの操作やビジネスルールの適用などが含まれます。
アクセサ
・アクセサは、モデルの属性(データベースのカラム)にアクセスする際、値を変更したり加工したりするためのメソッドです。アクセサは、Eloquentモデル内に定義され、属性の取得時に自動的に呼び出されます。
・アクセサは、データベースから取得される値を必要に応じて変換したりフォーマットしたりするために使用されます。例えば、日付のフォーマット変更、文字列の変換、数値の単位変換などが含まれます。
まとめ
Laravelのモデルは、Eloquent ORMを通じてデータベースと連携し、CRUD操作やリレーションシップ管理を簡単に行えます。
モデルを使うことで、データベースをオブジェクトとして扱い、直感的かつ効率的に行えるようになります。