Laravel Crud Editing创造新纪录

时间:2019-11-18 10:51:29

标签: php laravel

我的Laravel crud注册申请存在问题。 这些表格包括:注册额外注册(带有registration_id,extra_id和extraoptions_id), 额外额外选项(带有Extra_id)。

在RegistrationController中,当我添加一个Registration时,它会使用extraoptions_id和extra_id在ExtraRegistration中创建新记录。 extra_id是选项的名称,extraoptions_id是您选择的选项的ID。

但是,现在,当您单击“编辑记录”时,它将显示所有信息。问题在于,当您更改额外选项时,它会生成另一条记录,而不更改选择。 并且,当您编辑完某些内容并再次查看时,它仍会在您编辑之前显示该选项。

RegistrationController

$options = Extra::where("exa_form_id", $distance->asd_form_id)->get();
    foreach($options as $option){
      $input_name = "option_" . $option->exa_id;
      $input_option = $request->$input_name;
      if(!is_null($input_option)){
         $input_name_extra = "extraoptions_" . $option->exa_id;
         $input_option_extra = $request->$input_name_extra;                      

         $registrationextra = new ExtraRegistration();
         $registrationextra->iea_registration_id = $registration->isg_id;
         $registrationextra->iea_extra_id = $input_option;
         $registrationextra->iea_extraoption_id = $input_option_extra;
         $registrationextra->iea_price = $option->exa_price;
         $registrationextra->save();

         }               

       }

$registration->isg_options = $input_option;
$registration->isg_option_extra_id = $input_option_extra;

我要先进行检查,然后再进行新的ExtraRegistration。仅当具有该extra_id的registration_id不存在时,才进行新注册。 (尽管不是100%肯定)。

谢谢!

2 个答案:

答案 0 :(得分:0)

您创建了ExtraRegistration的新对象,因此它始终为更新创建新的条目,然后在更新后首先获取具有这些ID的对象
检查下面的链接

https://laravel.com/docs/5.8/eloquent#updates

答案 1 :(得分:0)

发生这种情况是因为您正在创建新的ExtraRegistration记录:

$registrationextra = new ExtraRegistration();

如果要更新它,则需要为$registrationextra找到相关的$options,然后更新它们(假设您已建立关系):

$registrationextra = ExtraRegistration::where('options_id', $option->id);
$registrationextra->update([
   'your_fields' => value
   // etc...
]);

如果要检查ExtraRegistration是否存在,并根据其创建或更新它,则可以执行以下操作:

$registrationextra = App\ExtraRegistration::updateOrCreate(
    ['your_fields' => 'value'],
);

您可以在官方documentation上阅读更多内容。