foreach ($remote_user_detail as $value){
$user = User::where('unique_id',$value->userid)->first();
if (count($user) > 0){
$user->unique_id = $value->userid;
$user->user_first_name = $value->name;
$user->card_id = $value->cardnumber;
$user->save();
}else{
$user = new User();
$user->company_id = Auth::user()->company_id;
$user->user_label = 2;
$user->unique_id = $value->userid;
$user->user_first_name = ($value->name=='') ? '' : $value->name ;
$user->card_id = $value->cardnumber;
$user->save();
}
}
теперь, как мне оптимизировать это, если еще, потому что уникальный идентификатор user_first_name и номер карты совпадают
как вы можете уточнить
но если name имеет значение null, тогда он должен принимать user_first_name как null, а если есть какое-либо имя, то вместо этого он должен принимать это имя.
Итак, как указано в одном из ответов, вы также можете просто назначить значение имени без if вообще.






Как указал Халид, вам не нужно проверять, поскольку вы уже назначаете пустое значение, поэтому это пустая трата. Это решение предназначено только в том случае, если вы хотите добавить что-нибудь еще.
Просто используйте Ternary opertor для $ user-> user_first_name, например
$user = new User();
$user->company_id = Auth::user()->company_id;
$user->user_label = 2;
$user->unique_id = $value->userid;
$user->user_first_name = ($value->name=='') ? '' : $value->name ;
$user->card_id = $value->cardnumber;
$user->save();
Может быть так?
$user = new User();
$user->company_id = Auth::user()->company_id;
$user->user_label = 2;
$user->unique_id = $value->userid;
$user->card_id = $value->cardnumber;
if ($value->name=='') {
$user->user_first_name = '';
}else {
$user->user_first_name = $value->name;
}
$user->save();
Согласно вашей проверке if нет необходимости в проверке if, потому что, если $value->name == '', вы сохраняете пустую строку в $user->user_first_name = '', поэтому вы можете удалить проверку if
$user = new User();
$user->company_id = Auth::user()->company_id;
$user->user_label = 2;
$user->unique_id = $value->userid;
$user->user_first_name = $value->name;
$user->card_id = $value->cardnumber;
$user->save();
Отредактируйте обновленную базу кода, вы можете реорганизовать свой код как
foreach ($remote_user_detail as $value){
$user = User::where('unique_id',$value->userid)->first();
if (count($user) == 0){
$user = new User();
$user->company_id = Auth::user()->company_id;
$user->user_label = 2;
$user->unique_id = $value->userid;
}
$user->user_first_name = $value->name;
$user->card_id = $value->cardnumber;
$user->save();
}
но в моей таблице user_first_name 'NOT NULL', поэтому должно быть указано какое-то значение
@Rahul, если вам нужно указать какое-то значение, вам понадобится оператор if. Также каково ваше значение по умолчанию для user_first_name?
Я рекомендую вам создать конструктор User и просто передать пользователя в качестве параметра 1 и $ value в качестве параметра 2.
class User {
//definitions here
function __construct2($user,$value)
{
company_id = $user->company_id;
user_label = 2;
unique_id = $value->userid;
user_first_name = $value->name;
card_id = $value->cardnumber;
}
}
Это сильно очищает код для будущего использования, если вы хотите перераспределить что-то вроде этого.
$user = new User(Auth::user(), $value);
Кроме того, как показано - нет необходимости в инструкции if.
Насколько я понимаю, в состоянии 2 $user->user_first_name всегда равен $value->name.
Увидеть себя if ($value->name=='') {$user->user_first_name = ''} Так что просто напишите свой код без «if else».
$user = new User();
$user->company_id = Auth::user()->company_id;
$user->user_label = 2;
$user->unique_id = $value->userid;
$user->user_first_name = $value->name;
$user->card_id = $value->cardnumber;
$user->save();
Кроме того, один совет для функции, если у вас есть, если у вас есть еще одна ситуация, используйте оператор объединения PHP 7 Null, вот ссылка и пример
http://php.net/manual/en/migration70.new-features.php#migration70.new-features.null-coalesce-op
// Fetches the value of $_GET['user'] and returns 'nobody'
// if it does not exist.
$username = $_GET['user'] ?? 'nobody';
// This is equivalent to:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
// Coalescing can be chained: this will return the first
// defined value out of $_GET['user'], $_POST['user'], and
// 'nobody'.
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
В операторе if я бы поместил только те вещи, которые меняются в соответствии с условием if. Там можно применить принцип СУХОЙ.
Для получения более подробной информации перейдите по этой ссылке http://web-techno.net/dry-principle-explained/
В вашем случае я выберу тернарный оператор:
Если это для вас в новинку, проверьте этот https://davidwalsh.name/php-shorthand-if-else-ternary-operators
$user = new User();
$user->company_id = Auth::user()->company_id;
$user->user_label = 2;
$user->unique_id = $value->userid;
$user->user_first_name = $value->name == '' ? '' : $value->name
$user->card_id = $value->cardnumber;
$user->save();
foreach ($remote_user_detail as $value){
$user = User::where('unique_id',$value->userid)->first();
if (count($user) > 0){
$user->unique_id = $value->userid;
$user->user_first_name = $value->name;
$user->card_id = $value->cardnumber;
$user->save();
}else{
$user = new User();
$user->company_id = Auth::user()->company_id;
$user->user_label = 2;
$user->unique_id = $value->userid;
$user->user_first_name = ($value->name=='') ? '' : $value->name ;
$user->card_id = $value->cardnumber;
$user->save();
}
}
теперь, как мне оптимизировать это, если еще, потому что уникальный идентификатор user_first_name и cardnumber одинаковы
Я думаю, вам следует обновить свое сообщение или задать новый вопрос, включая обновленный код, не публикуйте это как ответ
@junaid, я обновил свой вопрос, вы можете мне помочь.
Как насчет того, чтобы просто вставить другой бит в
if () ... else..., а не весь код?