【Laravel】 중간 테이블의 값을 DateTime 형으로 취득하고 싶다

목적



다대다 모델이 있고 중간 테이블에 Datetime 형식의 필드가 있다고 가정합니다.
예를 들어, 다음과 같이 사용자가 여러 학교에 다니고 있으며 각 학교를 시작한 날짜와 시간이있을 때,


시작일시를 DateTime으로 취득해 format()등의 메소드를 그대로 사용하고 싶을 때의 모델 정의는 어떻게 하면 좋을까에 대해서, 각서를 남깁니다.
foreach($user->schools as $school){
 echo $school->pivot->start_at->format('Y年m月d日'); // Datetimeにキャストされた状態で値を取得したい
}

결론



사용자 정의 중간 테이블 모델을 정의하고 거기에 날짜 뮤터를 추가합니다.

절차



1. 사용자 지정 중간 테이블 만들기



중간 테이블 자체의 원래 모델을 정의하고 사용할 수 있습니다.
Pivot을 상속하는 것을 잊지 마십시오.

SchoolUser.php
<?php

namespace App;

use Illuminate\Database\Eloquent\Relations\Pivot; 

class SchoolUser extends Pivot // Pivotを継承する
{
    //
}

2. 날짜 뮤터 설정



Eloquent에서는 $dates 속성을 설정하여 속성 값을 Carbon(DateTime 확장 클래스) 인스턴스로 가져올 수 있습니다.
그건 그렇고, 타임 스탬프 (created_at 및 updated_at)는 자동으로 캐스팅됩니다.
<?php

namespace App;

use Illuminate\Database\Eloquent\Relations\Pivot;

class SchoolUser extends Pivot
{
    protected $dates = ['start_at']; // 日付ミューテタの設定
}

3. 관계 설정



친숙하고 각 모델에서 다대다 관계를 belongsToMany로 설정합니다.
이 때, using 메소드를 호출하는 것으로, 커스텀 중간 테이블 모델을 사용할 수가 있습니다.

User.php
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * 役目を所有するユーザー
     */
    public function school()
    {
        return $this->belongsToMany('App\School')
                        ->using('App\SchoolUser') // カスタム中間テーブルの使用
                        ->withPivot([
                            'start_at',
                        ]);
    }
}

이상.

참고



Laravel 7.x Eloquent : 관계
Laravel 7.x Eloquent: 뮤테타

좋은 웹페이지 즐겨찾기