## Laravel의 Eloquent의 다중 테이블 상속: 더욱 깔끔한 접근 방식?

Barbara Streisand
풀어 주다: 2024-10-27 01:59:30
원래의
515명이 탐색했습니다.

## Multi-Table Inheritance in Laravel's Eloquent: A Cleaner Approach?

Laravel Eloquent의 다중 테이블 상속

단일 테이블 상속을 구현하는 것은 모델 확장을 위한 편리한 솔루션처럼 들리지만 다음과 같은 단점이 있습니다. 특정 열을 쿼리할 때 수많은 NULL 값과 복잡성으로 인해 데이터베이스 크기가 증가했습니다. 대신 다중 테이블 상속이 더 깔끔한 접근 방식을 제공합니다.

스키마 디자인

각 모델 유형에 대해 공유 열과 고유 열에 대해 별도의 테이블을 만듭니다. 예:

  • 게시물(shared_column)
  • 질문(질문_열, 질문_열2)
  • 기사 (article_column, Article_column2)

Eloquent Models

Post 모델을 상위 클래스로 정의합니다.

<code class="php">class Post extends Eloquent {
    // Shared column, relationships, etc.
    
    public function postable(){
        return $this->morphTo();
    }
}</code>
로그인 후 복사

게시 가능한 각 유형에 대해 질문과 같은 하위 모델을 만듭니다.

<code class="php">class Question extends Post {
    public function post(){
        return $this->morphOne('Post', 'postable');
    }
}</code>
로그인 후 복사

사용

  • 모든 게시물 검색: $posts = Post::all();
  • 모든 질문 검색: $questions = Question::all();
  • 게시물에서 질문 열 가져오기: $question_column2 = $post-> ;postable->question_column2;
  • 게시물 유형 확인: echo 'type: '.get_class($post->postable);

새로 만들기 모델

공유 테이블(게시물)과 유형별 테이블(질문) 모두에서 레코드를 생성하는 작업입니다.

<code class="php">$question = new Question(); // Create a question record
$question->question_column = 'test';
$question->save();

$post = new Post(); // Create a post record
$post->shared_column = 'New Question Post';
$post->save();

// Link them together
$question->post()->save($post);</code>
로그인 후 복사

이 접근 방식은 보다 효율적인 데이터베이스 구조를 보장하고 Laravel의 모델 상속을 위한 확장 가능한 솔루션을 제공합니다.

위 내용은 ## Laravel의 Eloquent의 다중 테이블 상속: 더욱 깔끔한 접근 방식?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!