Laravel Model

モデルクラスと物理テーブルのリレーション

命名規則

テーブルは複数形、モデルクラスは単数形
この名前のモデルクラスとテーブルが自動的に関連付けされる

リレーションを変更する場合

/**
* @var string
*/

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

リレーション一覧

ユーザー(User)、電話(Phone)のモデル定義例

種別 関係 機能
hasOne 1対1 ユーザは1つだけプロフィールを持つ
hasMany 1対多 ユーザは複数の記事を持つ
belongsTo 多対1 記事は1つのユーザーに属している
belongsMany 多対多 タグは複数の記事に属している

1対1

User:Phone=1:1

HasOne

class User extends Model
{
 public function phone() : HasOne
 {
  return $this->hasOne(Phone::class);
  ※Phoneモデルuser_id、Userモデルidを結合する場合

  return $this->hasOne(Phone::class, foreignKey);
  ※PhoneモデルforeignKey、Userモデルidを結合する場合

  return $this->hasOne(Phone::class, foreignKey, localKey);
  ※PhoneモデルforeignKey、UserモデルlocalKeyを結合する場合
 }
}

※コントローラ等で
$phone = User::find(1)->phone;

BelongsTo

class Phone extends Model
{
 public function user() : BelongsTo
 {
  return $this->belongsTo(User::class);
  ※Phoneモデルuser_id、Userモデルidを結合する場合
 }
}

※コントローラ等で
$phone = Phone::find(1)->user;

1対多

User:Post=1:N

HasMany

class User extends Model
{
 public function post() : HasMany
 {
  return $this->hasMany(Post::class);
  ※Postモデルuser_id、Userモデルidを結合する場合
 }
}

BelongsTo

class Post extends Model
{
 public function user() : BelongsTo
 {
  return $this->belongsTo(User::class);
  ※Postモデルuser_id、Userモデルidを結合する場合
 }
}

Follow me!

前の記事

Laravel View

次の記事

Laravel PHPUnit