Post 모델에서 확장된 Laravel의 Eloquent를 사용하여 Article 및 Question 모델에 대한 단일 테이블 상속을 어떻게 구현할 수 있습니까?

Barbara Streisand
풀어 주다: 2024-10-25 05:08:02
원래의
504명이 탐색했습니다.

How can you implement single table inheritance for Article and Question models using Laravel's Eloquent, extending from the Post model?

Laravel의 Eloquent를 사용하여 단일 테이블 상속 구현

질문:

Post 모델 지정:

<code class="php">class Post extends Eloquent {

    // Model code...
}</code>
로그인 후 복사

기사 및 질문 모델에 대한 상속을 구현하여 Post에서 확장할 수 있도록 하려면 어떻게 해야 합니까?

단일 테이블 상속

단일 테이블 상속에는 모든 모델 데이터 저장이 포함됩니다. 모델을 구별하기 위한 유형 열이 있는 단일 테이블에 있습니다. 그러나 이 접근 방식은 특정 모델 유형에 사용되지 않는 열로 인해 수많은 NULL 값이 발생할 수 있습니다.

다중 테이블 상속

다중 테이블 상속은 다형성을 사용하여 별도의 테이블을 활용합니다. 각 모델을 참조 테이블을 통해 연결합니다. 참조 테이블에는 postable_id 및 postable_type과 같은 열이 포함됩니다.

Eloquent 모델 설정

Post 모델에서 morphTo 관계를 정의합니다.

<code class="php">public function postable(){
    return $this->morphTo();
}</code>
로그인 후 복사

질문 모델에서(Article과 유사):

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

사용:

  • 모든 게시물 검색: Post::all()
  • 모든 질문 검색: 질문::all()
  • 게시물에서 질문 세부정보 가져오기: $question_column2 = $post->postable->question_column2
  • 게시물 유형 확인: if( $post->postable instanceof Question)
  • 새 질문 만들기:
<code class="php">$post = new Post();
$post->shared_column = 'New Question Post';
$post->save();

$question = new Question();
$question->question_column = 'test';
$question->post()->save($post);</code>
로그인 후 복사

결론

다중 테이블 상속은 단일 테이블 상속에 비해 더 효율적인 데이터베이스 구조. 추가 모델 로직이 필요하지만 Laravel의 Eloquent에서 모델 상속을 처리하기 위한 보다 유연하고 확장 가능한 접근 방식을 제공합니다.

위 내용은 Post 모델에서 확장된 Laravel의 Eloquent를 사용하여 Article 및 Question 모델에 대한 단일 테이블 상속을 어떻게 구현할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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