简体   繁体   English

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

[英]How can I save two models at the same time in Laravel?

I want to know how can I save two models which has one relationship in my models. 我想知道如何保存两个模型中具有一种关系的模型。 I don't know how to save it but I need the ID for my patient model to assign to my scale model. 我不知道如何保存它,但是我需要将患者模型的ID分配给我的体重秤模型。

Here is my PatientController. 这是我的PatientController。

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.');

}

I try this code but get error. 我尝试此代码,但出现错误。

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

You could try something like this: 您可以尝试这样的事情:

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.');
}

If the model uses a hasOne() relation like you said then the code show work, with a bit of modification of course. 如果模型像您说的那样使用hasOne()关系,则代码将显示正常工作,当然需要进行一些修改。

    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.');
}

First create and store base model and referencing it save related model 首先创建并存储基础模型,然后引用它保存相关模型

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.');

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM