我的方法中有以下代码,我通过 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();
});
现在的问题是我的表中有一条记录,但是上面的代码创建了另一个记录,第二个是它在每次单击按钮(请求)时创建乘以两条记录。
在您的用例中,您应该指定第二个参数。第一个表示匹配的条件,第二个用于指定要更新的字段。
$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#other-creation-methods
// 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 有一个名为
updateOrCreate
的方法,可以像这个例子一样使用:
<?
$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
搜索可能是识别行的最佳方式。以下是该方法的标志。
/**
* 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 = [])
在 Laravel 中,createOrUpdate() 方法用于判断数据是否存在,然后创建新条目或更新表中现有条目。
注意:您应该在您的案例的方法中包含一个条件。否则,它将创建一个新条目。
例如,如果您想查看user_id,代码如下:
$newUser = \App\UserInfo::updateOrCreate([
//Add your condition here.
//For ex: you want to add or update data by user_id:
'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是否存在,然后更新数据;否则,它将创建新数据。
查看官方文档: https://laravel-news.com/firstornew-firstorcreate-firstor-updateorcreate
还有一件事,如果您尝试使用默认值 (id) 以外的主键,您可能会遇到一条错误,提示“未找到列:1054 'where 子句'中的未知列 'id'”,你还会发现错误中哪里 id 为空...
您所需要的只是在用户模型中设置默认主键让我们假设它是 App\Models\Post
然后写 受保护的 $primaryKey = 'user_id'
就是这样:)