-
라라벨에서 hasOneOfMany 관계를 활용한 예시백엔드/laravel 2024. 1. 26. 13:45
라라벨에서 제공하는 "hasOneOfMany" 관계를 설명하는 예시로, 사용자(User)와 직업(Job) 모델을 가정한 상황입니다.
Job 모델과 마이그레이션 생성:
Artisan 명령어를 사용하여 Job 모델과 해당 모델에 대한 마이그레이션을 생성합니다.
php artisan make:model Job -m
Job 테이블 구조 정의:
Job 마이그레이션 파일에서 title, description, user_id, active 등 필요한 컬럼을 정의합니다.
public function up(): void
{
Schema::create('jobs', function (Blueprint $table) {
$table->id();
$table->string(column: 'title');
$table->text(column: 'description');
$table->foreignId(column: 'user_id')
->constrained(table: 'users')
->cascadeOnDelete();
$table->boolean(column: 'active')->default(value: false);
$table->timestamps();
});
}php artisan migrate;
User 모델에 hasOneOfMany 관계 정의:
User 모델에서 두 가지 메서드(latestJob 및 oldestJob)를 정의하여 hasOneOfMany 관계를 설정합니다.
class User extends Model
{
/**
* 최신 직업을 가져오는 관계 설정 메서드
*/
public function latestJob(): HasOne
{
return $this->hasOne(related: Job::class)->latestOfMany();
}
/**
* 가장 오래된 직업을 가져오는 관계 설정 메서드
*/
public function oldestJob(): HasOne
{
return $this->hasOne(related: Job::class)->oldestOfMany();
}
}class Job extends Model
{
use HasFactory;
protected $fillable = ['title', 'description', 'user_id', 'active'];
}php artisan Tinker;
------------------------
> User::find(7)->latestJob()->get();
> User::find(7)->oldestJob()->get();
$user = User::find(17);
$job1 = $user->latestJob; // 최신 직업 조회
$job2 = $user->oldestJob; // 가장 오래된 직업 조회
dd($job1->toArray(), $job2->toArray());'백엔드 > laravel' 카테고리의 다른 글
라라벨에서 다형성 관계(Polymorphic Relationships) (0) 2024.01.26 라라벨에서 에서 Has Many Through 관계를 사용한 예시 (0) 2024.01.26 라라벨 "hasOneThrough" 관계를 사용한 중첩된 모델 간 연결 설정 (1) 2024.01.26 라라벨 Many-to-Many Relationship (1) 2024.01.21 라라벨 Eloquent One-to-Many Relationship (0) 2024.01.21