laravel:如何将我资源设置给予空字符串而不是null

093gszye  于 2023-01-10  发布在  其他
关注(0)|答案(6)|浏览(209)

我有一个可以为空字段的数据库。当我通过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}
3zwjbxry

3zwjbxry1#

这里有一个更大的问题,那就是你的字段是否应该一开始就可以为空。通常你可以通过不让字段为空来解决这个问题,这将迫使你在插入/更新的时候而不是在显示它的时候放入一个空字符串。然而,我确实意识到,允许数据库中为空,但在返回资源时从不返回它们是合理的。
这就是说,你可以解决你的问题如下:

<?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 : '', 
        ];
    }
}

正如Dvek提到的,这可以缩短为$this->text ? : '',但有一个小警告,$this->text ? : ''将返回''的所有值$this->textfalsey,并不一定是空。在您的特定情况下,因为文本是字符串或空,它将是相同的,但这并不总是正确的。

yhxst69z

yhxst69z2#

如果你使用php7,那么你应该能够使用双问号操作符:

<?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
        ];
    }
}
idv4meu8

idv4meu83#

你可以用你的数据库结构来解决;

$table->string('person')->default('');
gz5pxeao

gz5pxeao4#

更改列并将空字符串设置为该列的默认值。这样,当您保存没有任何值的列时,它将为该列存储空字符串。

jvlzgdj9

jvlzgdj95#

你可以试试这个解决方案,它会把嵌套数组null中的每个值都转换成空字符串
第一个月

cu6pst1q

cu6pst1q6#

您只需要在资源中的任何可空字段之前添加( string ),它将转换为空字符串'person' => ( string )$this->person

相关问题