2016-07-09 11 views
1

私はより良い方法を見つけるために多くの検索をしました。私はすでに上で読むLaravel docs親テーブルIDを取得して子laravelに格納する方法

その

雄弁は、親モデルのID に子モデルから親IDに一致するようにしようとします。

私は、とDocumentテーブルを持っています。そして彼らは1:Mの関係を持っています。 Ideaには多くの文書を含めることができ、文書は1つのIdeaにしか関連しません。

ストアする親テーブルIDを取得できません。

コントローラ機能:

public function storeDocuments(DocumentRequest $request) { 

    if($request->hasFile('doc_name')) { 
     $filename = $request->file('doc_name')->getClientOriginalName(); 
     $moveFile = $request->file('doc_name')->move('documents/', $filename); 
    } 
    $doc = new Document(); 
    $doc->doc_name = $moveFile; 
    $doc->save(); 
} 

ドキュメントモデル:

public function idea() { 
    return $this->belongsTo('App\Idea'); 
} 

アイデアモデル:

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

電子ください親テーブルのIDを子テーブルに保存する手順をxplainしてください。

編集:

public function storeDocuments(DocumentRequest $request) { 

    if($request->hasFile('doc_name')) { 
     $filename = $request->file('doc_name')->getClientOriginalName(); 
     $moveFile = $request->file('doc_name')->move('documents/', $filename); 
    } 
    $doc = new Document(); 
    $doc->doc_name = $moveFile; 
    $idea = Idea::find(1); //how to get idea_id here??????? 
    $idea->documents()->save($doc); 
    return back(); 
} 

私はこの関係について非常に混乱しています。今のところ働いているし、理解できない。

アイデアスキーマ:

public function up() 
{ 
    // 
    Schema::create('ideas', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->integer('user_id')->unsigned(); 
     $table->string('idea_title'); 
     $table->string('idea_info', 150); 
     $table->string('idea_image'); 
     $table->string('selection'); 
     $table->longText('idea_description'); 
     $table->string('idea_location'); 
     $table->integer('idea_goal')->unsigned(); 
     $table->integer('pledge_amount')->unsigned(); 
     $table->string('set_equity')->nullable(); 
     $table->boolean('status')->default(0); 
     $table->rememberToken(); 
     $table->timestamps(); 
     $table->softDeletes(); 
    }); 
} 

文書スキーマ:

public function up() 
{ 
    // 
    Schema::create('documents', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->integer('idea_id')->unsigned(); 
     $table->string('doc_name'); 
     $table->rememberToken(); 
     $table->timestamps(); 
     $table->softDeletes(); 
    }); 
} 
+0

各 'Document'が' Idea'に関連しなければならないので、あなたは 'アイデアを持っている必要があります'あなたの**コントローラ機能で利用可能なIDまたはモデル**。フォーム内のアイデアを選択するか、ネストされたリソースが必要です。 –

+0

あなたが正しくあなたを理解していれば。あなたは文書でそのアイデアを保存します。しかし、あなたは特定のアイデアのためにドキュメントを追加する最後のIDを取得したいですか?私はそうですよね? –

答えて

0

手動でIDを設定する必要はありません、雄弁はあなたのためのことを行います。

documents()は、関連モードを保存するsaveメソッドを持つ関係を返します。 LS:

$idea->documents()->save($document); 

それも、一度に多く保存するsaveMany()方法があります。

$idea->documents()->saveMany($documents); 

UPDATE:

あなたのリポジトリクラスにそれを置く必要があります。 FOREIGN_KEYはidea_idすることを想定していますが、すでにスキーマを構築した場合、あなたがオーバーライドできるhasManyのメソッドに渡された秒 ONDのパラメータを持つ:

public function documents() { 
    $this->hasMany("\App\Document", "your_foreign_key_here"); 
} 

関連laravelのドキュメントがhereをしています。

希望に役立ちます。

UPDATE:それは単にアイデアのテーブルの主キーの値、あなたがfindメソッドで使用したのと同じ値を使用して

$idea_id = $idea->id; // assuming the ID field is not overriden in your schema/model 

。 1対多の関係は、デフォルトで結合によって動作し、親の主キー値を使用して子テーブルのレコードに結合します。

IDEA   DOCUMENT 
----------- --------------- 
| id |-->| idea_id | id | 
| 1  | | 1 | 1 | 
| 2  | | 1 | 2 | 
----------- ---------------- 

さて、SQLでクエリを再現しました。基本的に各モデルはテーブルを表し、テーブルの各レコードはそのモデルクラスのインスタンスを表します。それらを照会するには、その表に主キー・フィールドが必要です。そのため、すべてのレコードはそのフィールドで識別されます。それは雄弁に 'id'にデフォルト設定されています。

リレーションシップについて話すと、関連するテーブルを結合する別のフィールドが必要です。この特定の状況では、ドキュメントテーブル内のidea_idフィールドになります。

SELECT * FROM document JOIN idea ON document.idea_id = idea.id WHERE idea.id = 1 
:IDが1であるという考えに関連した文書をフェッチする場合は、ID = 1 SQLクエリは次のようにSGのように見えて、彼らはそのアイデアに接続されているので、その後、関連文書は、彼らの「idea_id]フィールドに1を持っています

しかし、私がすでに言ったように、雄弁にそれを行うので、明示的にその値を保存する必要はありません。

あなたの文書とアイデアテーブルまたは移行スキーマを教えてください。

UPDATE

パブリック関数storeDocuments(DocumentRequest $要求){

if($request->hasFile('doc_name')) { 
    $filename = $request->file('doc_name')->getClientOriginalName(); 
    $moveFile = $request->file('doc_name')->move('documents/', $filename); 
} 
$doc = new Document(); 
$doc->doc_name = $moveFile; 
$idea = Idea::find(1); // idea id is 1, but i guess it'll come from the route or sg like that in a real world scenario 
$idea_id = $idea->id; // the idea id : in this case = 1 
$idea->documents()->save($doc); 
return back(); 

}

+0

どこにこの行を追加する必要がありますか? 'storeDocuments'にありますか?もう少し説明していただけますか?ありがとう –

+0

編集@Tacsiazuma –

+0

を見てください申し訳ありませんが、私はまだ私はあなたを得ることができないので、混乱しています。主キーは 'Idea'テーブルの' id'です。この '$ idea'変数に関連するものと混同しています –

関連する問題