首页 > 解决方案 > 在 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'
      ]);

标签: laraveleloquent

解决方案


您可以使用 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);


推荐阅读