我使用以下存储方法将数据保存到表中。
public function store(Request $request)
{
foreach ($request->admin_id as $key=>$val){
$adminbillings = AdminBilling::create([
'month' => $request->month,
'rate' => $request->rate[$key],
'admin_id' => $val,
]);
}
return redirect('/');
}
现在,我想在存储之前检查表中是否已存在任何输入值。如果表中的一行已经包含所有3个相同的输入,则它应该什么都不做,否则存储输入。这就像是
if
$requested->month does not exist in month column ||
$requested->rate does not exist in rate column ||
$requested->admin_id does not exist in admin_id column
then
save
请帮帮我。我正在使用Laravel 5.4。
谢谢
答案 0 :(得分:1)
有一种Laravel方法可以帮助您调出 firstOrCreate
,请参阅https://github.com/laravel/framework/blob/5.4/src/Illuminate/Database/Eloquent/Builder.php#L356
你将如何使用
AdminBilling::firstOrCreate([
'month' => $request->month,
'rate' => $request->rate[$key],
'admin_id' => $val,
]);
解释
如果你看到它的源代码,那么&首先,如果它发现它只是返回
if (! is_null($instance = $this->where($attributes)->first())) {
return $instance;
}
否则它会使用给定的数组创建一个新行&返回模型
return tap($this->newModelInstance($attributes + $values), function ($instance) {
$instance->save();
});
提示
当您使用 firstOrCreate
时,您应该始终只有一个,然后使用其余数据进行更新,例如
Course::firstOrCreate([
'isbn' => (string) $isbn,
])->update([
'title' => $title,
'url' => 'URL',
'date_published' => $datePublished
]);
此处ISBN对我来说是独一无二的,因此我使用 firstOrCreate
调用 $isbn
,然后我用其余数据更新了行< / p>