Метод laravel updateOrCreate
У меня есть следующий код в моем методе, который я отправляю через ajax в метод контроллера:
$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')
]);
dd($request->all())
дает мне:
array:8 [
"_token" => "fHeEPfTvgMD3FpIBmmc6DmKXFaiuWKZEiOhg6twQ"
"about" => "Some about me."
"sec_email" => "[email protected]"
"country" => "Priority highest"
"gender" => "male"
"dob" => "12/12/1990"
"address" => "Some address"
"cell_no" => "234234234"
]
который является совершенным.
Код 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();
});
Теперь проблема в том, что у меня есть запись в моей таблице. Но вышеприведенный код создает еще один. И второе - это то, что он создает умножение на две записи на каждом нажатии кнопки (запрос).
Ответы
Ответ 1
В вашем случае использования вы должны указать второй параметр. Первый указывает условия для совпадения, а второй - для указания полей для обновления.
$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')
]);
Вот пример из документации: https://laravel.com/docs/5.4/eloquent
// If there 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]
);
Ответ 2
Мой код
CityProductTemp::updateOrCreate(
[
'city_id' => $city_id,
'product_id' => $product->product_id
],
[
'mrp' => $mrp,
'sale_price' => $sale_price,
'in_offer' => $in_offer,
'is_featured' => $is_featured,
'sort_number' => $sort_number
]
);
Неизвестный id
столбца в разделе where
SQL: UPDATE city_product_temp SET mrp = 66, is_featured = 1,
updated_at = 2017-09-15 15:23:17, in_offer = 0 WHERE 'id' IS null