2016-09-26 9 views
0

私はすべてのユーザファイルを格納したい "ファイル"という名前のテーブルが1つあります。 ファイルはさまざまなビューからアップロードすることができ、質問テーブル、回答テーブル、コメントテーブル、メッセージテーブルなどさまざまなテーブルに関連付ける必要がありますが、それらのすべてがユーザーテーブルにも関連付けられます。誰がファイルの所有者であるかを知る。Laravel 5.3複数のテーブルに関連するファイルテーブル

例:「ユーザーが質問し、他のユーザーが質問をより簡単に理解できるように写真を添付する」

質問の値は 'questions_table'になり、ファイルは 'files_table'に移動し、ユーザーIDも 'files_table'に移動します。

質問がございます! (長いご紹介申し訳ありません): ピボットテーブルを使用しますか?または '1'から 'files_table'へのdouble型の一対多の関係& 2. 'question_table'から 'files_table'へ?

+0

にこのタイプの関係についての詳細を学ぶことをお勧めします。それ以外にも、他のテーブルの単一のレコードに属する多くのファイルを想像していますか?また、ファイルからリンクされたレコード(質問など)にアクセスできるようにしたいのですか、リンクされたレコードからファイルにアクセスしたいだけですか? – ollieread

+0

これは、ファイルが1つのターゲット(質問、回答など)にしか属していない場合、ファイルテーブルの1:nモーフで簡単に解決できます。所有者にとっては、作成者のIDだけです。質問とファイル表の両方に列として追加できます。 – Robert

+0

_tableは、テーブルの名前ではなくテーブルについて話していることを示しています。問題はユーザーに属し、ファイルは質問に属し、ユーザーにも属します。 –

答えて

1

これはPolymorphic Relationshipの完璧な使用例だと思います。ここで

は、テーブルの構造である:filesテーブルで

users 
- id 
- name 

questions 
- id 
- title 

files 
- id 
- user_id 
- filable_id 
- filable_type 

、あなたは質問ID、回答ID、コメントIDのいずれかを参照するために起こっているfilable_idフィールドを見ることができます。 filable_typeは、どのオブジェクトがこのファイルに関連付けられているかをレコードに伝えます。

class Question extends Model 
{ 
    /** 
    * Get all of the question's files. 
    */ 
    public function files() 
    { 
     return $this->morphMany('App\File', 'filable'); 
    } 
} 

class File extends Model 
{ 
    /** 
    * Get all of the owning filable models. 
    */ 
    public function filable() 
    { 
     return $this->morphTo(); 
    } 
} 

私は非常に私は、テーブル名に `_table`を持っていないことをお勧めLaravel Documentation

+0

ありがとう、私がしたことthats。ちょうど私が良いことを確認したい:) –

関連する問題