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を結合する場合
}
}