2017-02-22 33 views
0

У меня в моей модели запрос на получение данных из базы данных, и в моей таблице базы данных есть поля с нулевым значением. Когда я пытаюсь отобразить все записи в моем представлении, поля с нулевым значением отображаются как «NULL». Я хочу, чтобы эти значения отображались как пустая строка.Laravel Eloquent значение nullable полей, преобразованное в строку «NULL»

Вот что у меня в контроллере:

public function showDetails($action, $id) 
{ 
     $data_model= new PersonData(); 
     $persons= $data_model->loadSpecificPerson($id); 

     return view('pages.admin.reporting_person_details', ['action' => $action, 'id' => $id])->with('id', $id)->with(compact('persons')); 
} 

В моей модели:

public function loadSpecificPerson($id) 
{ 
     $persons = DB::select("SELECT * FROM complainant_t WHERE ComplainantID = ?", [$id]); 
     return $persons; 
} 

Я хотел сделать это нравится, как вы могли бы сделать это в массиве:

foreach($array as $key => $value) 
{ 
    if($array[$key] == NULL) 
    { 
     $array[$key] = ""; 
    } 
} 

Это невозможно использовать с $ людьми, так как это объект и к нему нужно обращаться с правом имени? Итак, как мне это сделать без доступа к ним по именам столбцов?

+0

Вы уверены, что значение NULL, а не «NULL» в вашей БД? Две разные вещи – geckob

+0

'$ result = DB :: select ($ sql) -> get(); $ result = $ result-> toArray(); 'он преобразует ваш объект в массив –

+0

Предположительно, когда он равен NULL, он ничего не отобразит – geckob

ответ

0

В основном NULL Поле всегда отображается '' Пустая строка. Но если нет, то вы можете достичь, как показано ниже.

foreach($persons as $person){ 
    //consider you want to display here 
    //Please check it's NULL or 'NULL' 
    echo $person->field === NULL ? '' : $person->field; 
} 

Здесь в основном это будет проверять все поля, если поле NULL то он будет отображаться '' пустая строка иначе она будет отображаться исходное значение.

Надеюсь, это поможет вам!

+0

Привет, мне нужно указать поле? –

+0

изменить 'поле' в соответствии с вашей базой данных' column name' –

0

Использование is_null или === оператора.

  • is_null ($ результат [ 'колонка'])
  • $ результат [ 'столбец'] === NULL

В Laravel, вы можете прочитать о `ToArray()», который будет конвертировать объект в массив, а позже вы можете использовать обычную логику. Ref: https://laravel.com/docs/5.2/collections

В модели

return $persons->toArray(); 

Logic

$object = new stdClass(); 
foreach($array as $key => $value) 
{ 
    $array[$key] = is_null($value) ? '' : $value; 
    $object->$key = is_null($value) ? '' : $value; 
} 

Если вы хотите использовать объект затем использовать переменную $object еще $array как массив

+0

Если я преобразую его в массив, мне нужно будет использовать массив для моего клинка вместо объекта? –

+0

Да .... и если вы хотите использовать объект только в лезвии, тогда конвертируйте в массив и манипулируйте значениями и снова конвертируйте в объект ... – Naincy

+0

Можете ли вы показать мне, как конвертировать обратно в объект? –

0

Поскольку я не тот, кто сделал DB, я только что понял, проблема в том, что значения поля «NULL» (строка). Я изменил его как NULL, и теперь он отлично работает, не преобразовывая его в пустую строку.

+0

Точно. Много людей путают об этом – geckob

+0

@geckob Да, это была глупая ошибка, и я не понимал этого, пока не посмотрел базу данных. Спасибо, что указали! –