親子関係(1対多)にあるテーブルのModelのコード例です。
外部キー制約を使用しないケースで、主テーブルのデータ削除時、従テーブルのID紐づきデータも一括操作したい場合
Model.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use App\Models\Person;
class Person extends Model
{
/**
* Bootstrap any application services.
*
* @return void
*/
public static function boot()
{
parent::boot();
// 親データ削除時:子テーブルのid紐付レコードも削除
static::deleting(function ($person) {
$person->schedule()->delete();
$person->company()->delete();
$person->position()->delete();
$person->assessment()->delete();
});
// 親データ削除時:従テーブルの親ID欄はnull挿入
static::deleting(function ($person) {
$person->schedules()->update(['person_id' => null]);
});
// 状態フラグを無効設定時:従テーブルのデータはnull挿入
static::updating(function ($person) {
if($person->status_flg === '1') {
$person->schedules()->update(['person_id' => null]);
}
});
}
日付けデータ等、DATE型で保存した値を取得時、常に加工しておきたい場合
Model.php
/**
* Get schedule date as 'Y-m-d' format.
* @param mixed $value
*/
public function getScheduleDateAttribute() // get...Attribute()の...に取得・加工するカラム名をアッパーキャメル形式で記載
{
return date_format(date_create($this->schedule_date), 'Y-m-d');
}
/**
* Get schedule time as 'H:i' format.
* @param mixed $value
*/
public function getScheduleTimeAttribute()
{
return date_format(date_create($this->schedule_time), 'H:i');
}
Modelへのリレーション設定
Model.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use App\Models\Company;
use App\Models\Person;
class Schedule extends Model
{
/**
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function company()
{
return $this->belongsTo(Company::class);
}
/**
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function Person() // 記載はModel同様アッパーキャメル形式。belongTo側は単数形、hasMany側は複数形。
{
return $this->belongsTo(Person::class, 'person_id', 'id'); // 第2引数以降は、不要。但し、指定する外部キーが●●_id形式以外だったり、特定の外部キーを指定したい場合は必要。
}
/**
* @return \Illuminate\Database\Eloquent\Relations\BlongsTo
*/
public function schedules()
{
return $this->hasMany(Schedule::class, 'company_id', 'id');
}