Сохранить значение внешнего ключа в laravel

В таблице миграции:

Schema::create('passws', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('regist_id')->unsigned()->nullable();
        $table->foreign('regist_id')->references('id')->on('regists');
        $table->string('age');
        $table->timestamps();
    });
}

Модель регистрации - определено массовое присвоение.

 public function pass(){
    return $this->hasOne('App\Passw');
}

В контроллере

$name = $request->name;
$task = Regist::whereName($name)->get();
    foreach ($task as $tasks){
        $passw1->regist_id = $tasks->id;
    }
 $passw1->age = $request->age;
 $regist = new Regist();
 $regist->pass()->save($passw1);

Когда я сохраняю данные, сохраняется только возраст, но regist_id сохраняется как нуль (нет сообщения об ошибке или ничего). Здесь я уверен, что контроллер показывает "regist_id" => 1 и "age" => 25, когда я использую dd($passw1); regist_id, только не получает записи в таблице БД.

Где я делаю ошибку??


person Samuel Henry    schedule 06.08.2018    source источник


Ответы (1)


Попробуй это

$name = $request->name;

$regist = Regist::whereName($name)->first(); //it will give you a Regist model

$regist->pass()->create([    
     'age' => $request->age
]);

Если у вас есть более одного Regist для $name, попробуйте это

$regists = Regist::whereName($name)->get(); //it will give you a collection of Regist model

foreach ($regists as $regist){
    $regist->pass()->create([    
          'age' => $request->age
    ]);
}

Проверьте документ здесь https://laravel.com/docs/5.6/eloquent-relationships#the-create-method

person rkj    schedule 06.08.2018