Как автоматически заполнить идентификатор внешнего ключа в отношениях «многие к одному» в Laravel? - PullRequest
0 голосов
/ 15 октября 2018

У меня есть две модели с именами Question и Factor.Один 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 голосов
/ 15 октября 2018

Вы можете использовать метод отношения save() для уже созданного экземпляра модели.

Сначала создайте коэффициент, а затем сохраните вопрос снова.например, $factor->questions()->save($question);

...