Laravel Model

プロパティ

属性
プロパティ 機能 備考
$fillable 指定したカラムにはcreate、update、fillでの更新が可能 =ホワイトリスト
$guarded 指定したカラムにはcreate、update、fillでの更新が不可 =ブラックリスト
$casts first()で取得した際の自動型変換を矯正 $cast例参照

 

$casts例
protected $casts = [
 'id' => 'int',
]

アクセサ

※Testモデルクラス
class Test extends Model
{
 public function getXXXAttribute()
 {
  return $this->カラム名 . 'laravel';
 }
}

呼び出し
$this->xxx

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

命名規則

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

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

/**
* @var string
*/

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

リレーションとユーザー定義関数

リレーション
public function recentPost(){ 〜 }

呼び出し時
$this->recentPost;

ユーザー定義関数
public function recentPost(){ 〜 }

呼び出し時
$this->recentPost();

リレーション一覧

ユーザー(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を結合する場合
 }
}

 
 

前の記事

Laravel View

次の記事

Laravel Migration/Seed