Você pode tentar resolvê-lo no lado do SQL. Mas você ainda precisará usar o PHP para escrever essa consulta maluca dinamicamente. Ou pior - você escreverá o código do programa em SQL. Embora o pós-processamento em PHP seja bastante simples:
// $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});
}
}
Que são efetivamente três linhas de código bastante simples. O resultado de
var_export($row)
:stdClass::__set_state(array(
'field1' => 'value1',
'field3' => 'value3',
))
Como você vê, o campo com NULL é removido.
Melhor ainda:mantenha sua consulta simples e selecione
test2
em vez de IF(test2 = "myText" , test2, FALSE) AS test2_Alias
. E então crie "dinamicamente" test2_Alias
se necessário:if ($row->test2 == 'myText') {
$row->test2_Alias = $row->test2;
}
Sim - isso é chato. Nada chique. Mas você vai adorar código simples, quando tentar corrigir alguns bugs.
Atualizar
Do nosso bate-papo:
Supondo que seu "valor específico" esteja armazenado em
$specificValue
. $row = DB::('example')->select('test1, test2, test3')->first();
if ($row->test2 != $specificValue) {
unset($row->test2, $row->test3);
}
É isso. IMHO é melhor do que executar duas consultas como:
$test2 = DB::('example')->value('test2');
$select = ($test2 == $specificValue)
? 'test1, test2, test3'
: 'test1';
$row = DB::('example')->select($select)->first();