Laravel API-更新或创建
我正在使用Laravel API-更新或创建,laravel,Laravel,我正在使用updateOrCreate存储动态字段中的数据。更新工作正常,但我在添加新行时出错 public function store(Request $request) { foreach($request->rows as $row) { $db = Book::updateOrCreate(['id' => $row['id']]); $db->author_id = $request->author_id; $db-
updateOrCreate
存储动态字段中的数据。更新工作正常,但我在添加新行时出错
public function store(Request $request) {
foreach($request->rows as $row) {
$db = Book::updateOrCreate(['id' => $row['id']]);
$db->author_id = $request->author_id;
$db->publisher_id = $request->publisher_id;
$db->title = $row['title'];
$db->genre = $row['genre'];
$db->save();
}
}
我尝试过这种方法,但现在它不适用于更新和创建
public function store(Request $request) {
foreach($request->rows as $row) {
$db = Book::updateOrCreate(
['id' => $row['id'],
[
'title' => $row['title'];
]
]);
}
}
错误消息
updateOrCreate(数组$attributes,数组$values=[]))
创建或更新与属性匹配的记录,并用值填充。
所以你的参数不正确。它需要两个数组参数,而不是一个数组。
看看这个:
公共函数存储(请求$Request){
foreach($request->行作为$row){
$db=Book::updateOrCreate(
['id'=>$row['id']],
[
'title'=>$row['title']
]);
}
}
updateOrCreate(数组$attributes,数组$values=[]))
创建或更新与属性匹配的记录,并用值填充。
所以你的参数不正确。它需要两个数组参数,而不是一个数组。
看看这个:
公共函数存储(请求$Request){
foreach($request->行作为$row){
$db=Book::updateOrCreate(
['id'=>$row['id']],
[
'title'=>$row['title']
]);
}
}
更新或创建
您还可能遇到需要更新
现有模型或创建新模型(如果不存在)。拉威尔提供
一个updateOrCreate方法,可以一步完成此操作。像
第一个或创建方法,updateOrCreate将模型持久化,因此没有
需要调用save():
updateOrCreate(数组$attributes,数组$values=[])
它应该是这样的。但请确保您有可填充的模型
选择1
//Option 1
foreach($request->rows as $row) {
$db = Book::updateOrCreate(
[
'id' => $row['id'] ?? null
],
[
'author_id' => $request->author_id,
'publisher_id' => $request->publisher_id,
'title' => $row['title'],
'genre' => $row['genre']
]
);
}
选项2
// Options 2
foreach($request->rows as $row) {
$input = [
'author_id' => $request->author_id,
'publisher_id' => $request->publisher_id,
'title' => $row['title'],
'genre' => $row['genre']
];
if (isset($row['id'])) {
if($db = Book::find($row['id'])) {
$db->update($input);
continue;
}
}
Book::create($input);
}
编辑:
这些错误表明您的路由不接受POST方法。。将其更改为POST方法 例:
Route::post()
而不是Route::get()
更新或创建
您还可能遇到需要更新
现有模型或创建新模型(如果不存在)。拉威尔提供
一个updateOrCreate方法,可以一步完成此操作。像
第一个或创建方法,updateOrCreate将模型持久化,因此没有
需要调用save():
updateOrCreate(数组$attributes,数组$values=[])
它应该是这样的。但请确保您有可填充的模型
选择1
//Option 1
foreach($request->rows as $row) {
$db = Book::updateOrCreate(
[
'id' => $row['id'] ?? null
],
[
'author_id' => $request->author_id,
'publisher_id' => $request->publisher_id,
'title' => $row['title'],
'genre' => $row['genre']
]
);
}
选项2
// Options 2
foreach($request->rows as $row) {
$input = [
'author_id' => $request->author_id,
'publisher_id' => $request->publisher_id,
'title' => $row['title'],
'genre' => $row['genre']
];
if (isset($row['id'])) {
if($db = Book::find($row['id'])) {
$db->update($input);
continue;
}
}
Book::create($input);
}
编辑:
这些错误表明您的路由不接受POST方法。。将其更改为POST方法 例:
Route::post()
而不是Route::get()
确保在控制器中使用了模型
use App\ExampleModel;
在模型中编写受保护的可填充字段,如下所示:
protected $fillable = [
'title','genre', ...
];
确保您使用了控制器中的模型
use App\ExampleModel;
在模型中编写受保护的可填充字段,如下所示:
protected $fillable = [
'title','genre', ...
];
这个错误很奇怪。我仍然有500个错误。如果我删除
['id'=>$row['id']]
错误就消失了,创建新行可以正常工作,但是更新也会创建另一个数据。错误很奇怪。我仍然有500个错误。如果我删除['id'=>$row['id']]
错误消失,创建新行可以正常工作,但更新后也会创建另一个数据。全部选中。非常感谢。都查过了。非常感谢。这个错误很奇怪。添加新闻行时,两个选项仍有500个错误,但更新有效。两个选项现在都有效,非常感谢!你真棒!这个错误很奇怪。添加新闻行时,两个选项仍有500个错误,但更新有效。两个选项现在都有效,非常感谢!你真棒!这些错误表明您的路由不接受POST方法。。将其更改为POST Method您编辑的帖子使其正常工作。非常感谢你!这些错误表明您的路由不接受POST方法。。将其更改为POST Method您编辑的帖子使其正常工作。非常感谢你!