2016-12-05 7 views
0

おはようございます、私はEloquentのモデル関係に少し問題があります。中間の表を使って記事と画像をリンクする必要があります。中間テーブルでは、記事と画像の両方のIDを追加したいのですが、記事に属するすべての画像を取得したいのですが、関係を管理するにはどうすればよいでしょうか?事前に感謝ラベールの雄弁での一対多の関係

+1

https://laravel.com/docs/5.3/eloquent-relationships#one-to-many Laravelは文書化されていますが、ドキュメントを読む場合はこれを尋ねる必要はありません。 – Devon

答えて

0

:その後、

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

そして記事のすべての画像をロードするためにeager loadingを使用し

更新:テーブル構造は次のようになります。

- 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リレーションシップのため、ピボットテーブルを使用する必要はありません。

だけhasMany()関係を使用:​​あなたはこのようなあなたの問題を解決するためにmorphMany()関係(Polymorphic Relationship)を使用することができます

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