Anda dapat mencoba menyelesaikannya di sisi SQL. Tetapi Anda masih perlu menggunakan PHP untuk menulis kueri gila itu secara dinamis. Atau lebih buruk lagi - Anda akan menulis kode program dalam SQL. Sementara pemrosesan pos di PHP cukup sederhana:
// $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});
}
}
Itu secara efektif tiga baris kode yang cukup sederhana. Hasil dari var_export($row)
:
stdClass::__set_state(array(
'field1' => 'value1',
'field3' => 'value3',
))
Seperti yang Anda lihat, bidang dengan NULL dihapus.
Lebih baik lagi:buat kueri Anda tetap sederhana dan cukup pilih test2
alih-alih IF(test2 = "myText" , test2, FALSE) AS test2_Alias
. Dan kemudian "secara dinamis" buat test2_Alias
jika diperlukan:
if ($row->test2 == 'myText') {
$row->test2_Alias = $row->test2;
}
Ya - itu membosankan. Tidak ada yang mewah. Tetapi Anda akan menyukai kode sederhana, ketika Anda mencoba memperbaiki beberapa bug.
Perbarui
Dari obrolan kami:
Dengan asumsi "nilai spesifik" Anda disimpan di $specificValue
.
$row = DB::('example')->select('test1, test2, test3')->first();
if ($row->test2 != $specificValue) {
unset($row->test2, $row->test3);
}
Itu dia. IMHO lebih baik daripada menjalankan dua kueri seperti:
$test2 = DB::('example')->value('test2');
$select = ($test2 == $specificValue)
? 'test1, test2, test3'
: 'test1';
$row = DB::('example')->select($select)->first();