2016-10-26 6 views
1

laravel 5.2クエリを使用してテーブルに新しい行を作成しようとしています。Laravelクエリで複数の値を渡す方法

マイテーブル "答え" 5 columns->answer_id (auto_inc), people_id(sames as Auth::id), question_id('Integer'), answer(input field), created_at(timestamp())

answercontrollerファイルがあります:私は答えに新しい行を追加することができないんだ

<?php 

namespace App\Http\Controllers; 

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

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

答えモデルクラス

class answers extends Model 
{ 
    protected $table='answers'; 
    protected $fillable='answer'; 
    protected $primaryKey='answer_id'; 
    public function setUpdatedAtAttribute($value) {} 
    public function User() 
    { 
     return $this->belongsTo('App\User'); 
    } 
    public function questions() 
    { 
     return $this->belongsTo('App\questions','people_id'); 
    } 
} 

を私は理解できないので、テーブルにquestion_idを渡すことができます

の質問モデルクラス

class questions extends Model 
{ 
    protected $table='questions'; 
    protected $primaryKey='question_id'; 
    protected $fillable = [ 
     'question', 'created_at','details' 
    ]; 
    //protected $hidden=['question_id']; 
    public function setUpdatedAtAttribute($value) {} 
    public function User() { 
     return $this->belongsTo('App\User'); 
    } 
    public function answers() 
    { 
     return $this->hasMany('App\answers','answer_id'); 
    } 
    public function scopefetchQuestions($query) { 
     return $query->select('question','question_id')->where('people_id','=',Auth::id())->get(); 
    } 
} 

現在のコードでこのエラーを投げています:私はそれを修正するにはどうすればよい

BadMethodCallException in Builder.php line 2405: 
Call to undefined method Illuminate\Database\Query\Builder::answers() 

+0

あなたが実際に質問(「question_id」)でquestion_idを入れているか、あなただけのようにすることを持っているかに外部キーを追加文字列? – Crawdingle

+0

'question_id'は 'questions'テーブルの列です –

答えて

1

これをしてくださいしてみてください。

class answerController extends Controller 
{ 
    public function store(Requests\answerAddRequest $request) 
    { 
     $answer = App\Answer::create($request->all()); 
     Auth::user()->questions()->where('question_id', $request->get('question_id'))->first()->answers()->save($answer); 
    } 
} 

$fillable配列が https://laravel.com/docs/5.2/eloquent#inserting-and-updating-models https://laravel.com/docs/5.2/eloquent-relationships#inserting-related-models

+0

クエリは機能しましたが、今度は 'Auth :: user()'は "id"を返さない、people_idには0を返します –

+0

ユーザーは 'id'、これを変更するには 'protected $ primaryKey'変数を変更する必要がありますが、この場合古いユーザデータは壊れてしまい、Userモデルと対話する各関係メソッドに対してローカルキーと外部キーを変更する必要があります。ちょうど 'id'のままにしておく方がよいでしょう – Roman

関連する問題