public function postForms($template) { $databaseRules = []; $inputRules = []; $rules = BlockFormRule::where('form_template', '=', $template)->get(); if (!$rules->isEmpty()) { foreach ($rules as $rule) { $databaseRules[$rule->field] = $rule; } } $rules = Request::get('rule'); if (!empty($rules)) { foreach ($rules as $rule) { $inputRules[$rule['field']] = $rule['rule']; } } $toAdd = array_diff_key($inputRules, $databaseRules); $toUpdate = array_intersect_key($inputRules, $databaseRules); $toDelete = array_diff_key($databaseRules, $inputRules); if (!empty($toDelete)) { BlockFormRule::where('form_template', '=', $template)->whereIn('field', array_keys($toDelete))->delete(); } if (!empty($toAdd)) { foreach ($toAdd as $field => $rule) { $newBlockFormRule = new BlockFormRule(); $newBlockFormRule->form_template = $template; $newBlockFormRule->field = $field; $newBlockFormRule->rule = $rule; $newBlockFormRule->save(); } } if (!empty($toUpdate)) { foreach ($toUpdate as $field => $rule) { if ($rule != $databaseRules[$field]->rule) { $databaseRules[$field]->rule = $rule; $databaseRules[$field]->save(); } } } return \redirect()->route('coaster.admin.themes.forms'); }