laravel: как установить для моего ресурса пустую строку вместо нуля - PullRequest
0 голосов
/ 29 апреля 2018

У меня есть база данных с пустыми полями. Когда я отправляю свои значения через api resource, laravel отправляет null значения. Я хочу получить пустые строки вместо этого. Как мне это настроить?

пример:

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\Resource;

class RequirementResource extends Resource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'active' => $this->active,
            'person' => $this->person, //sometimes has null value
            'edit' => false,
            'buttons' => false,
            'text' => $this->text, //sometimes has null value
        ];
    }
}

Я хочу объект json:

{"active": false, "person": "", "edit": false, "buttons": false, "text": ""}

вместо этого у меня есть:

{"active": false, "person": null, "edit": false, "buttons": false, "text": null}

Ответы [ 4 ]

0 голосов
/ 30 апреля 2018

Здесь возникает более важный вопрос, и нужно ли начинать с вашего поля значение NULL. Обычно вы можете решить эту проблему, не имея поля, которое можно обнулять, что заставит вас вставлять пустую строку во время вставки / обновления, а не при ее отображении. Тем не менее, я понимаю, что необязательно разрешать пустые значения в базе данных, но никогда не возвращать их при возврате ресурса.

При этом вы можете решить свою проблему следующим образом:

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\Resource;

class RequirementResource extends Resource
{
    public function toArray($request)
    {
        return [
            'active' => $this->active,
            'person' => $this->person !== null ? $this->person : '',
            'edit' => false,
            'buttons' => false,
            'text' => $this->text !== null ? $this->text : '', 
        ];
    }
}

Как упомянул Двек, это можно сократить до $this->text ? : '', но есть небольшое предостережение, которое $this->text ? : '' вернет '' для всех значений $this->text, которые falsey и необязательно равны нулю. В вашем конкретном случае, поскольку текст является либо строкой, либо нулем, он будет таким же, но это не всегда так.

0 голосов
/ 29 апреля 2018

Вы можете решить с вашей структурой базы данных;

$table->string('person')->default('');
0 голосов
/ 30 апреля 2018

если вы используете php 7, тогда вы сможете использовать оператор двойного знака вопроса:

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\Resource;

class RequirementResource extends Resource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'active' => $this->active,
            'person' => $this->person ?? '', //sometimes has null value
            'edit' => false,
            'buttons' => false,
            'text' => $this->text ?? '', //sometimes has null value
        ];
    }
}
0 голосов
/ 29 апреля 2018

Изменить столбец и установить пустую строку в качестве значения по умолчанию для этого столбца. Затем, когда вы сохраняете любой столбец без какого-либо значения, он сохраняет для него пустую строку.

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