如何在Laravel中以多对一关系自动填充外键ID?

时间:2018-10-15 09:40:12

标签: php one-to-many laravel-5.7

我有两个名为QuestionFactor的模型。一个Factor属于许多Question,每个Question都有一个Factor。我在模型中定义了这种多对一关系。我想在QuestionController中存储一个因数。我找到问题对象并通过该问题创建一个因数。当我在Postman中测试此函数时,该因子已成功存储,但是factor_id不会自动插入问题表。我不想通过一个因子创建问题对象(这种方式的逆转)。因为因子对象是在付款时和问题对象创建之前创建的,该怎么办? 这是问题表:

 Schema::create('questions', function (Blueprint $table) {
        $table->increments('id');
        $table->string('title')->nullable();
        $table->timestamps();
        $table->integer('factor_id')->unsigned()->nullable();
        $table->foreign('factor_id')->references('factors')->on('id')->onDelete('cascade');
    });

这是因子表:

 Schema::create('factors', function (Blueprint $table) {
        $table->increments('id');
        $table->string('number_factor')->nullable();
        $table->decimal('total_price',15,2)->nullable();
        $table->timestamps();
    });

这是问题模型:

  class Question extends Model
{
    protected $guarded=[];
    public function factors()
    {
        return $this->belongsTo(Factor::class,'factor_id');
    }
}

这是因子模型:

 class Factor extends Model
{
    protected $guarded=[];
    public function questions()
    {
        return $this->hasMany(Question::class,'factor_id');
    }
}

这是QuestionController

 public function storeFactor(Request $request,$questionId)
{
    $question=Question::find($questionId);
    if(is_null($question)){
        return response()->json([
            'success'=>false,
            'message'=>'This question is not exist!'
        ],404);
    }
    $question->factors()->create($request->all());
    $question->save();
    return response()->json([
        'success'=>true,
        'message'=>'Factor successfully Stored.'
    ],200);
}

这是我的路线:

Route::post('question/storeFactor/{id}','API\QuestionController@storeFactor');

1 个答案:

答案 0 :(得分:1)

您可以在已经创建的模型实例上使用save()关系方法。

首先创建因子,然后再次保存问题。例如$factor->questions()->save($question);