Bạn có thể thử giải quyết nó trên SQL. Nhưng bạn vẫn sẽ cần sử dụng PHP để viết động truy vấn điên rồ đó. Hoặc tệ hơn - Bạn sẽ viết mã chương trình bằng SQL. Trong khi xử lý bài viết bằng PHP khá đơn giản:
// $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});
}
}
Đó thực sự là ba dòng mã khá đơn giản. Kết quả từ var_export($row)
:
stdClass::__set_state(array(
'field1' => 'value1',
'field3' => 'value3',
))
Như bạn thấy, trường có NULL sẽ bị xóa.
Tốt hơn nữa:hãy giữ cho truy vấn của bạn đơn giản và chỉ cần chọn test2
thay vì IF(test2 = "myText" , test2, FALSE) AS test2_Alias
. Và sau đó "động" tạo test2_Alias
nếu cần:
if ($row->test2 == 'myText') {
$row->test2_Alias = $row->test2;
}
Vâng - điều đó thật nhàm chán. Không có gì lạ mắt. Nhưng bạn sẽ thích mã đơn giản, khi bạn cố gắng sửa một số lỗi.
Cập nhật
Từ cuộc trò chuyện của chúng tôi:
Giả sử "giá trị cụ thể" của bạn được lưu trữ trong $specificValue
.
$row = DB::('example')->select('test1, test2, test3')->first();
if ($row->test2 != $specificValue) {
unset($row->test2, $row->test3);
}
Đó là nó. IMHO tốt hơn là thực hiện hai truy vấn như:
$test2 = DB::('example')->value('test2');
$select = ($test2 == $specificValue)
? 'test1, test2, test3'
: 'test1';
$row = DB::('example')->select($select)->first();