【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: 뮤테타
Reference
이 문제에 관하여(【Laravel】 중간 테이블의 값을 DateTime 형으로 취득하고 싶다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sakichan_td/items/7fe5aa91f7ef3d2d5e1f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)