Laravel 개발: Laravel Eloquent를 사용하여 다형성 연관을 구현하는 방법은 무엇입니까?
Laravel 개발: Laravel Eloquent를 사용하여 다형성 연관을 구현하는 방법은 무엇입니까?
다형성 연관은 Laravel Eloquent의 중요한 기능으로, 하나의 모델이 여러 다른 모델과 관계를 설정할 수 있게 해줍니다. 실제 응용 프로그램에서 다양한 유형의 데이터를 처리하는 것은 특히 데이터베이스 설계에서 상대적으로 간단하고 효율적입니다. 이 글에서는 Laravel Eloquent를 사용하여 다형성 연관을 구현하는 방법에 대해 설명합니다.
1. 다형성 연관이란 무엇인가요?
다형성 연관은 여러 다른 모델과 연관 관계를 설정하는 모델을 말하며, 이는 일반 범주에 대한 참조로 간주될 수 있습니다.
- 이미지, 오디오 및 비디오 모델은 모두 주석 모델과 다형성 연관을 설정할 수 있으므로 주석을 여러 데이터 유형에 적용할 수 있습니다.
- 사용자는 댓글 모델과 다형성 연관을 구축하고 기사, 사진, 비디오 등과 같은 다양한 데이터 유형에 적용할 수 있습니다.
- 주문 모델은 배송 주소 모델과 다형성 연관을 설정할 수 있으므로 주문이 집, 회사, 매장 등 다양한 주소 유형으로 배송될 수 있습니다.
2. 다형성 연관 구현 방법
Laravel Eloquent를 사용하여 다형성 연관을 구현하는 방법을 살펴보겠습니다.
우선 데이터 테이블의 디자인을 고려해야 합니다. 모델 간의 다형성 관계를 저장하려면 중간 테이블을 만들어야 합니다. 이 테이블에는 다음 열이 포함되어야 합니다.
- target_type: 대상 모델 유형 이름;
- source_type: 소스 모델 유형 이름; 모델의 ID입니다.
- 다음은 데이터베이스 마이그레이션 파일의 예입니다.
- 위 마이그레이션 파일에서는 comments와 vote라는 두 개의 새 테이블을 만들었습니다.
- 댓글 테이블에는 댓글 모델의 기본 정보가 포함되어 있으며, morphs() 메서드를 사용하여 다형성 연관 포인팅을 구현합니다. vote 테이블은 유사하며 voteable_id 및 voteable_type 필드를 사용하여 다형성 연관을 구현합니다.
<?php use IlluminateDatabaseMigrationsMigration; use IlluminateDatabaseSchemaBlueprint; use IlluminateSupportFacadesSchema; class CreateCommentsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('comments', function (Blueprint $table) { $table->id(); $table->morphs('commentable'); $table->text('content'); $table->timestamps(); }); Schema::create('votes', function (Blueprint $table) { $table->id(); $table->unsignedBigInteger('user_id'); $table->unsignedBigInteger('voteable_id'); $table->string('voteable_type'); $table->enum('type', ['up', 'down']); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('comments'); Schema::dropIfExists('votes'); } }
<?php namespace AppModels; use IlluminateDatabaseEloquentFactoriesHasFactory; use IlluminateDatabaseEloquentModel; class Comment extends Model { use HasFactory; public function commentable() { return $this->morphTo(); } public function votes() { return $this->morphMany(Vote::class, 'voteable'); } }
<?php namespace AppModels; use IlluminateDatabaseEloquentFactoriesHasFactory; use IlluminateDatabaseEloquentModel; class Vote extends Model { use HasFactory; public function voteable() { return $this->morphTo(); } public function user() { return $this->belongsTo(User::class); } }
$article = Article::find(1); $comment = $article->comments()->create([ 'content' => 'This is a comment', ]);
$votes = $comment->votes;
$comments = $article->comments;
$comment->votes()->create([ 'user_id' => 1, 'type' => 'up', ]);
위 내용은 Laravel 개발: Laravel Eloquent를 사용하여 다형성 연관을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Laravel - Artisan Commands - Laravel 5.7은 새로운 명령을 처리하고 테스트하는 새로운 방법을 제공합니다. 여기에는 장인 명령을 테스트하는 새로운 기능이 포함되어 있으며 데모는 아래에 언급되어 있습니다.

Laravel - Artisan Console - Laravel 프레임워크는 명령줄을 통한 상호 작용을 위한 세 가지 기본 도구인 Artisan, Ticker 및 REPL을 제공합니다. 이번 장에서는 Artisan에 대해 자세히 설명합니다.

Laravel - 페이지 매김 사용자 정의 - Laravel에는 사용자나 개발자가 페이지 매김 기능을 포함하는 데 도움이 되는 페이지 매김 기능이 포함되어 있습니다. Laravel 페이지네이터는 쿼리 빌더 및 Eloquent ORM과 통합되어 있습니다. 자동 페이지 매김 방법

Laravel 이메일 전송이 실패 할 때 반환 코드를 얻는 방법. Laravel을 사용하여 응용 프로그램을 개발할 때 종종 확인 코드를 보내야하는 상황이 발생합니다. 그리고 실제로 ...

laravel 일정 작업 실행 비 응답 문제 해결 Laravel의 일정 작업 일정을 사용할 때 많은 개발자 가이 문제에 직면합니다 : 스케줄 : 실행 ...

Laravel의 이메일을 처리하지 않는 방법은 LaRavel을 사용하는 것입니다.

DCAT를 사용할 때 DCATADMIN (LARAVEL-ADMIN)에서 데이터를 추가하려면 사용자 정의의 테이블 기능을 구현하는 방법 ...

Laravel - 덤프 서버 - Laravel 덤프 서버는 Laravel 5.7 버전과 함께 제공됩니다. 이전 버전에는 덤프 서버가 포함되어 있지 않습니다. 덤프 서버는 laravel/laravel 작곡가 파일의 개발 종속성이 됩니다.
