I’m trying to return a SVG based on the value 1,2 or 3
from my database column called foo_options
.
- IF 1 return Green SVG
- IF 2 return Orange SVG
- IF 3 return Red SVG
foo_options
has the value of 3 in the database. So the SVG should be Red.
Here is what I have in my Model:
public function getOptionValueAttribute(){ if ('1') { return '<svg>Green</svg>'; }elseif ('2') { return '<svg>Orange</svg>'; }elseif ('3') { return '<svg>Red</svg>'; } else { return ''; } }
Then my logic is:
if($bar->barDetail->some_options = '1' || $bar->barDetail->some_options = '2' || $bar->barDetail->some_options = '3') { dd($bar->barDetail->optionValue); }
With the above logic, GREEN (1) is always returned.
Any help to return Red would be much appreciated.
Advertisement
Answer
The getOptionValueAttribute function is not doing any checks inside. You pass the string ‘1’ to the if operator and if works with boolean. A non empty string is always converted to true and therefore you always return green.
What I assume that you are trying to do is that you wish to check the value of some variable and return different results if it is 1, 2 or 3. Therefore I would think that you will need to pass that variable as input for the function and than compare the value to it:
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 ''; } }
That way if you call the function like this (for example) you will get the Red:
getOptionValueAttribute(3);
If you insist on working with strings, just add the quotes around the numbers.
I don’t know what the second code that you shown above is trying to explain. I don’t get that logic and how it is related to the function at all. Note that the comparison operator is == or ===, not just =.