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

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

Barbara Streisand
Barbara Streisand원래의
2024-10-25 05:08:02505검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.