请求数据:
[
"invoice_data" => [
...
"discount" => null,
],
"product_credit" => [
...
"discount" => null,
]
];
我要做什么
我正在尝试创建一个if statement
来检查
$request -> invoice_data['discount'] == null
,然后将其设置为 0 还
$request -> product_credit['discount'] == null
,然后将其设置为 0
在验证过程之前,因为验证将失败。
我尝试过的事情:
我在Laravel中找到了一种名为prepareForValidation()
的方法,它使用的是$this -> merge([...])
,但我无法在invoice_data
和{{1 }}。
答案 0 :(得分:1)
设置属性默认值的方式比在请求有效负载中进行编辑的方法更简洁:
Model {
protected $attributes = [
'inovice_data' => 0,
'discount' => 0,
'product_credit' => 0
];
}
以这种方式,如果没有提供任何值,或者未定义的值或为null,则Eloquent会在填充db时将这些属性设置为已定义的默认值。
答案 1 :(得分:0)
<?php
$data =
[
"invoice_data" => [
"discount" => null,
],
"product_credit" => [
"discount" => null,
]
];
$keyWhitelist = [
'invoice_data',
'product_credit'
];
foreach ($data as $key => $entry) {
if(!in_array($key, $keyWhitelist)) {
continue;
}
if(key_exists('discount',$entry)) {
if ($entry['discount'] === null) {
$data[$key]['discount'] = 0;
}
}
}
var_export($data);
给出结果:
array (
'invoice_data' =>
array (
'discount' => 0,
),
'product_credit' =>
array (
'discount' => 0,
),
)
答案 2 :(得分:0)
您可以检查结果,然后在验证之前将其嫁接到请求。
if(!$request->filled(invoice_data.discount)){
$request->merge(['invoice_data.discount' => 0]);
}