2016-12-05 9 views
0

안녕하세요, Eloquent의 모델 관계에 약간의 문제가 있습니다. 해당 기사의 기사와 이미지를 중간 테이블로 연결해야합니다. 중간 테이블에서 article과 image의 ID를 모두 추가하고 기사에 속한 모든 이미지를 검색하고 싶습니다. 관계를 관리하는 가장 좋은 방법은 무엇입니까? 미리 감사드립니다.laravel eloquent의 일대 다 관계

+1

https://laravel.com/docs/5.3/eloquent-relationships#one-to-many Laravel은 문서화가 잘되어 있으므로 문서를 읽는 경우이 질문을하지 않아도됩니다. – Devon

답변

0

당신은이 같은 문제를 해결하기 위해 morphMany() 관계 (Polymorphic Relationship)를 사용할 수 있습니다 :

그냥 hasMany() 관련하여 사용

업데이트 : 테이블 구조는 다음과 같습니다 :

- articles 
    - id 
    - title 
    - content 
    - ... 

- images 
    - id 
    - owner_id 
    - owner_type (Here there can be - Article, Auction, User, etc) 
    - name 
    - mime_type 
    - ... 

다형성 관계는 모델이 하나의 관계에서 하나 개 이상의 다른 모델에 속할 수 있습니다. 예를 들어 사용자가 응용 프로그램에서 게시물 및 비디오를 "주석 처리"할 수 있다고 상상해보십시오. 다형성 관계를 사용하면이 두 가지 시나리오 모두 에 대해 하나의 주석 표를 사용할 수 있습니다.

당신이 모델은 다음과 같이 표시됩니다

class Article extends Model 
{ 

    public function images() 
    { 
     return $this->morphMany(Image::class, 'owner'); 
    } 

} 

class Image extends Model 
{ 

    public function owner() 
    { 
     return $this->morphTo(); 
    } 

} 

이 기사에 여러 개의 이미지를 저장하려면, 당신은 할 수와 같은 :

$article->images()->create([... inputs_arr ...]); 

그들을 가져,이 같은 작업을 수행 할 수 있습니다 :

$articleImages = Article::find($id)->images; 

희망이 있습니다.

+0

그래서 테이블에 데이터를 저장하는 방법은 무엇입니까? 어디에서 DB와의 관계를 맺을 수 있습니까? 이전에 일반 PHP에서 작업했기 때문에 모델을 만들기 전에 DB를 만들었습니다. 감사합니다 : D –

+0

이 경우 2 테이블이 있습니다. 테이블 구조는 위의 업데이트 된 대답과 같습니다. –

+0

경매, 사용자 등의 다른 모델과 관련된 이미지 테이블을 사용하면 문제가 없습니까? –

3

one-to-many 관계이므로 피벗 테이블을 사용할 필요가 없습니다. 기사의 모든 이미지를로드 할 eager loading를 사용하여 다음

public function images() 
{ 
    return $this->hasMany('App\Image'); 
} 

그리고 :

$article = Article::with('images')->where('id', $articleId)->first();