Как я могу сохранить две модели одновременно в Laravel? - PullRequest
0 голосов
/ 29 октября 2018

Я хочу знать, как я могу сохранить две модели, которые имеют одно отношение в моих моделях. Я не знаю, как его сохранить, но мне нужен идентификатор для моей модели пациента, чтобы назначить ее для моей масштабной модели.

Вот мой 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.');

}

Я пробую этот код, но получаю ошибку.

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

Ответы [ 3 ]

0 голосов
/ 29 октября 2018

Вы можете попробовать что-то вроде этого:

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(), как вы сказали, тогда код покажет работу, с небольшими изменениями, конечно.

0 голосов
/ 29 октября 2018
    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.');
}
0 голосов
/ 29 октября 2018

Сначала создайте и сохраните базовую модель и, ссылаясь на нее, сохраните связанную модель

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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...