laravel - 在 updateOrCreate 中使用条件语句
问题描述
在更新之前,我需要检查特定值是否为空。如果它为空,请避免更新该列
DrmCustomer::updateOrCreate([
'email'=> isset($row['email']) ? $row['email'] : "",
'user_id'=> $user_id,
],[
(isset($row['fieldMobilePhone']['value'])) ?: 'phone'=> $row['fieldMobilePhone']['value'],
(isset($row['fieldWebsite']['value'])) ?: 'website'=> $row['fieldWebsite']['value'],
(isset($row['fieldStreet1']['value'])) ?: 'address'=> $row['fieldStreet1']['value'],
(isset($row['fieldCity']['value'])) ?: 'city'=> $row['fieldCity']['value'],
(isset($row['fieldState']['value'])) ?: 'state'=> $row['fieldState']['value'],
(isset($row['fieldZip']['value'])) ?: 'zip_code'=> $row['fieldZip']['value'],
(isset($row['fieldCountry']['value'])) ?: 'country'=> $row['fieldCountry']['value'],
'default_language'=> 'DE',
'currency'=> 'EUR',
'insert_type'=> 'API'
]);
解决方案
您可以使用 Laravel Collection 使用以下技术过滤数据
<?php
$mapFields = [
'fieldMobilePhone' => 'phone',
'fieldWebsite' => 'website',
'fieldStreet1' => 'address',
'fieldCity' => 'city',
'fieldState' => 'state',
'fieldZip' => 'zip_code',
'fieldCountry' => 'country',
];
$validKeys = array_keys($mapFields);
$collection = collect($row);
$data = $collection->filter(function($value, $key) use($validKeys){
return Arr::get($value, 'value' false) && in_array($key, $validKeys);
})->flatMap(function($value, $key) use($mapFields){
return [
$mapFields[$key] => $value['value']
];
})->merge([
'default_language'=> 'DE',
'currency'=> 'EUR',
'insert_type'=> 'API'
])->all()->toArray();
DrmCustomer::updateOrCreate([
'email'=> Arr::get($row, 'email', ''),
'user_id'=> $user_id,
], $data);
推荐阅读
- ios - Facebook 登录的自定义 URL 方案 (fb(appID)://) 说“Safari 无法打开页面,因为地址无效”即使在编辑 info.plist 之后也是如此
- r - 替换字符串
- node.js - 如何将 Express.js 中的请求标头共享给静态 SPA?
- javascript - Vue js条件v用于数据
- java - Google Kickstart 2020 轮 C:倒计时 - 代码不工作
- javascript - 单击“转到上一页”链接返回上一个窗口
- postgresql - 邮递员。如何查看 pg_dump 的日志?
- c# - 如何在 Fetch Place 调用中指定多个字段?
- javascript - Javascript - 获取唯一且排序的数组
- angular - 清除离子间隔后在后台运行的计时器