Как сделать так, чтобы пустые значения имели значение по умолчанию? - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь присвоить значения атрибута модели другому значению, когда они не заполнены. На данный момент это то, с чем я работаю в моей модели:

public function getAttribute($property){
    if(blank($this->attributes[$property])){
        return $this->attributes[$property] = '-';
    }else{
        return $this->attributes[$property];
    }
}

Это работает, но я не думаю, что этоправильный способ сделать это.

Я ищу правильный способ сделать это.

пример:

Допустим, значение в базе данных равно NULL, я хочу этопоказывать «-» при отображении, но я не хочу сохранять «-» в базе данных.(Я также не хочу использовать мутаторы "get ... Value" для каждого значения)

1 Ответ

2 голосов
/ 02 июля 2019

Решение 1

Начиная с PHP 7, появилась новая функция, называемая Оператор объединения нулей .Он возвращает первый оператор, когда он существует, и не является NULL:

{{ $model->attribute ?? '-' }}

То же самое, что и это:

{{ isset($model->attribute) ? $model->attribute : '-' }}

Решение 2

Другое решениебыло бы немного сложнее, но выполнимо:

Создайте базовую модель, на которую вы распространите все остальные модели:

class BaseModel extends Model {

    protected $emptyAttributes = [];

    protected function getAttribute($property)
    {
        if (in_array($property, $this->emptyAttributes) && blank($this->attributes[$property])) {
            return '-';
        }
        else {
            return $this->attributes[$property];
        }
    }
}

Теперь распространите все модели, которые вы хотите, на этот новый класс исоздайте массив «атрибутов для замены»:

class User extends BaseModel {

    protected $emptyAttributes = ['name', 'email'];

}

Это должно автоматически заменить атрибуты name и email, когда они пусты, NULL или строка только пробелов.

Примечание: Вы также можете перенести функциональность в черту (что может быть более элегантным решением, но это зависит от вас).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...