2016-10-27 8 views
2

テーブル 'answers'に複数の列の値を挿入しようとしています。私は正常に挿入されている質問テーブルからquestion_idを挿入しています。LaravelがテーブルにAuth :: idを挿入しない

しかし、それは認証を挿入していない:ユーザー()IDは今、テーブルに

answercontrollerコード '0' を返す:私はquestions()->findOrFail($question_id)->first()一部を削除した場合

<?php 

namespace App\Http\Controllers; 

use App\questions; 
use Illuminate\Http\Request; 
use Auth; 
use App\Http\Requests; 

class answerController extends Controller 
{ 
    public function store($question_id,Requests\answerAddRequest $request) 
    { 
     Auth::user()->questions()->findOrFail($question_id)->first()->answers()->create($request->all()); 
    } 
} 

を、それがAUTHを挿入します。 :id、これではなく、どうすれば修正できますか?これはちょうど1つのクエリを作成します

$request->user_id = auth()->user()->id; 
$request->question_id = $question_id; 
Answer::create($request->all()); 

、それははるかに読みやすく、保守します:ユーザーIDがanswersテーブルにある場合

答えて

1

関連モデルを使用してモデルを作成すると、Laravelが自動的に外部キーを埋めるためです。私はあなたのクエリを分割した場合、それはのようになりますよう :ここ

$user = Auth::user(); 
$question = $user->questions()->findOrFail($question_id)->first(); 
$question->answers()->create($request->all()); 

は、それが自動的にquestion_idを埋めるだろうが、それは$userを使用して作成されていないようuser_idを記入しないようにモデルが$question Modelオブジェクトによって作成される応答します。

しかし、あなたのようにあなたのコードを記述する場合:

$user->answers()->create($request->all()); 

それは自動的にuser_idのフィールドを記入します。

更新

はあなたのように書くことができますquestion_id塗りつぶすには:それは戻って今の両方に '0' だ

$inputs = $request->all(); 
$inputs['question_id'] = $question_id; 
$user->answers()->create($inputs); 
+0

次に、question_idを挿入しますか? –

0

、なぜあなたはちょうどこれをしません。単純にする。

+0

。カラムはuser_idではなくpeople_idです –

+0

これらのフィールドをすべて '$ fillable'配列に追加しましたか?はい、 'dd($ request-> user_id、$ request-> question_id);'あなたが 'Answerの直前に置くかどうかを表示します。 :: ' –

+0

はいこれは私が答えのモードのために持っているものです:'クラスの答えはモデルを拡張します { protected $ table = 'answers'; protected $ fillable = ['answer'、 'question_id'、 'people_id']; $ primaryKey = 'answer_id'; ' –

関連する問題