Tengo el siguiente código en mi método que estoy enviando a través de ajax al método del controlador:
$newUser = \App\UserInfo::updateOrCreate([ 'user_id' => Auth::user()->id, 'about' => $request->get('about'), 'sec_email' => $request->get('sec_email'), 'gender' => $request->get("gender"), 'country' => $request->get('country'), 'dob' => $request->get('dob'), 'address' => $request->get('address'), 'mobile' => $request->get('cell_no') ]); El dd($request->all()) me da:
array:8 [ "_token" => "fHeEPfTvgMD3FpIBmmc6DmKXFaiuWKZEiOhg6twQ" "about" => "Some about me." "sec_email" => "example@gmail.com" "country" => "Priority highest" "gender" => "male" "dob" => "12/12/1990" "address" => "Some address" "cell_no" => "234234234" ]que es perfecto
codigo jquery:
$('#submit-editProfile-form').on('click', function() { var profileEditForm = $("#edit-user-profile"); var formData = $('#edit-user-profile').serialize(); profileEditForm.on('submit', function(e){ e.preventDefault(); $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } }); $.ajax({ url:'/freelance/edit-userProfile-info', type:'POST', data:formData, error: function (data) { console.log('Error'); } }); }).submit(); });Ahora el problema es que tengo un registro en mi tabla, pero el código anterior crea otro, y el segundo es que crea multiplicar por dos registros en cada clic de botón (solicitud).
En su caso de uso, debe especificar un segundo parámetro. El primero indica las condiciones para una coincidencia y el segundo se usa para especificar qué campos actualizar.
$newUser = \App\UserInfo::updateOrCreate([ //Add unique field combo to match here //For example, perhaps you only want one entry per user: 'user_id' => Auth::user()->id, ],[ 'about' => $request->get('about'), 'sec_email' => $request->get('sec_email'), 'gender' => $request->get("gender"), 'country' => $request->get('country'), 'dob' => $request->get('dob'), 'address' => $request->get('address'), 'mobile' => $request->get('cell_no') ]);Aquí hay un ejemplo de la documentación: https://laravel.com/docs/5.4/eloquent
// If there's a flight from Oakland to San Diego, set the price to $99. // If no matching model exists, create one. $flight = App\Flight::updateOrCreate( ['departure' => 'Oakland', 'destination' => 'San Diego'], ['price' => 99] );Eloquent tiene el método llamado updateOrCreate , que se puede usar como este ejemplo:
<? $flight = UserInfo::updateOrCreate( [ 'user_id' => Auth::user()->id, ], [ 'about' => $request->get('about'), 'sec_email' => $request->get('sec_email'), 'gender' => $request->get("gender"), 'country' => $request->get('country'), 'dob' => $request->get('dob'), 'address' => $request->get('address'), 'mobile' => $request->get('cell_no') ], );user_id podría ser su mejor manera de identificar sus filas.El siguiente es el signo del método.
/** * Create or update a record matching the attributes, and fill it with values. * * @param array $attributes * @param array $values * @return \Illuminate\Database\Eloquent\Model */ public function updateOrCreate(array $attributes, array $values = [])