Функция getOptionValueAttribute не выполняет никаких внутренних проверок. Вы передаете строку '1' оператору if и if работает с логическим значением. Непустая строка всегда преобразуется в истину, и поэтому вы всегда возвращаетесь зеленым. это 1, 2 или 3. Поэтому я бы подумал, что вам нужно будет передать эту переменную в качестве входных данных для функции, а затем сравнить с ней значение:
public function getOptionValueAttribute($option){
if ($option == 1) {
return '<svg>Green</svg>';
}elseif ($option == 2) {
return '<svg>Orange</svg>';
}elseif ($option == 3) {
return '<svg>Red</svg>';
} else {
return '';
}
}
Таким образом, если вы вызовете функцию, например это (например) вы получите красный:
getOptionValueAttribute(3);
Если вы настаиваете на работе со строками, просто добавьте кавычки вокруг чисел.
Я не знаю, что второй код, который вы показали выше, пытается объяснить. Я не понимаю, что logi c вообще связано с функцией. Обратите внимание, что оператор сравнения == или ===, а не просто =.