आप इसे SQL पक्ष पर हल करने का प्रयास कर सकते हैं। लेकिन आपको उस पागल क्वेरी को गतिशील रूप से लिखने के लिए अभी भी PHP का उपयोग करने की आवश्यकता होगी। या इससे भी बदतर - आप SQL में प्रोग्राम कोड लिखेंगे। जबकि PHP में पोस्ट प्रोसेसिंग काफी सरल है:
// $row = DB::..
$row = (object)[ // result from DB
'field1' => 'value1',
'field2' => null,
'field3' => 'value3'
];
foreach (get_object_vars($row) as $key => $val) {
if ($val === null) {
unset($row->{$key});
}
}
यह प्रभावी रूप से काफी सरल कोड की तीन पंक्तियाँ हैं। var_export($row)
. से परिणाम :
stdClass::__set_state(array(
'field1' => 'value1',
'field3' => 'value3',
))
जैसा कि आप देख सकते हैं, NULL वाली फ़ील्ड हटा दी गई है।
और भी बेहतर:अपनी क्वेरी को सरल रखें और बस test2
. चुनें के बजाय IF(test2 = "myText" , test2, FALSE) AS test2_Alias
. और फिर "गतिशील रूप से" test2_Alias
create बनाएं यदि आवश्यक हो:
if ($row->test2 == 'myText') {
$row->test2_Alias = $row->test2;
}
हाँ - यह उबाऊ है। कुछ भी काल्पनिक नहीं। लेकिन जब आप कुछ बग्स को ठीक करने का प्रयास करेंगे तो आपको सरल कोड पसंद आएगा।
अपडेट करें
हमारी चैट से:
मान लें कि आपका "विशिष्ट मान" $specificValue
. में संग्रहीत है ।
$row = DB::('example')->select('test1, test2, test3')->first();
if ($row->test2 != $specificValue) {
unset($row->test2, $row->test3);
}
यही बात है। IMHO यह दो प्रश्नों को निष्पादित करने से बेहतर है जैसे:
$test2 = DB::('example')->value('test2');
$select = ($test2 == $specificValue)
? 'test1, test2, test3'
: 'test1';
$row = DB::('example')->select($select)->first();