Php 如何在Laravel中同时保存两个模型?

Php 如何在Laravel中同时保存两个模型?,php,laravel,Php,Laravel,我想知道如何保存在我的模型中有一个关系的两个模型。我不知道如何保存它,但我需要将患者模型的ID指定给缩放模型 这是我的病人控制员 public function store(Request $request) { $this->validate($request, [ 'name' => 'required', 'birth' => 'required', 'nacionality' => 'required',

我想知道如何保存在我的模型中有一个关系的两个模型。我不知道如何保存它,但我需要将患者模型的ID指定给缩放模型

这是我的病人控制员

public function store(Request $request)
{
    $this->validate($request, [
        'name' => 'required',
        'birth' => 'required',
        'nacionality' => 'required',
        'adress' => 'required',
        'phone' => 'required',
        'living_method' => 'required',
        'responsable' => 'required',
    ]);

    //Create Patient
    $patient = new Patient;
    $scales = new Scale;
    $patient->name = $request->input('name');
    $scales->sd_abc_1_old = $request->input('sd_abc_1_old');
    $patient->save();

    return redirect('/patients')->with('success', 'Paciente creado.');

}
我尝试了这段代码,但出现了错误

 DB::transaction(function() use ($patient, $scales) {
   $patient = $patient->save(); //Patient Exists First
   Patient::find($patient->id)->scales()->save($scales)
 });

首先创建并存储基础模型,并引用它保存相关模型

public function store(Request $request)
{
    $this->validate($request, [
        'name' => 'required',
        'birth' => 'required',
        'nacionality' => 'required',
        'adress' => 'required',
        'phone' => 'required',
        'living_method' => 'required',
        'responsable' => 'required',
    ]);

    //Create Patient
    $patient = new Patient;
    $patient->name = $request->input('name');
    $patient->save();

    $scales = new Scale;
    $scales->sd_abc_1_old = $request->input('sd_abc_1_old');

    $patient->scales()->save($scales);


    return redirect('/patients')->with('success', 'Paciente creado.');

}

您可以尝试以下方法:

public function store(Request $request)
{
    $this->validate($request, [
        'name' => 'required',
        'birth' => 'required',
        'nacionality' => 'required',
        'adress' => 'required',
        'phone' => 'required',
        'living_method' => 'required',
        'responsable' => 'required',
    ]);

    //Create Patient
    $patient = new Patient;
    $patient->name = $request->name;
    $patient->save();
    $patient->scale()->create(['patient_id' => $patient->id, 'sd_abc_1_old' => $request->sd_abc_1_old]);
);

return redirect('/patients')->with('success', 'Paciente creado.');
}

如果模型像你说的那样使用了一个
hasOne()
关系,那么代码显示工作正常,当然需要做一些修改

这是直截了当的。首先创建和存储基本模型并引用它保存相关模型这不会保护您免受数据库异常的影响。
Scale
上的第二次DB插入可能会失败,现在
Patient
的第一次DB插入将成为孤立记录。
    public function store(Request $request)
    {
    $this->validate($request, [
    'name' => 'required',
    'birth' => 'required',
    'nacionality' => 'required',
    'adress' => 'required',
    'phone' => 'required',
    'living_method' => 'required',
    'responsable' => 'required',
]);

//Create Patient
    $patient = Patient::create([
    'name' => $request->input('name'),
 ]);
 $scale = Scale::create([
 'patient_id' => $patient->id, 
'sd_abc_1_old' => $request->sd_abc_1_old,
 ]);



 return redirect('/patients')->with('success', 'Paciente creado.');
}