我有一个可以为空字段的数据库。当我通过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}
6条答案
按热度按时间3zwjbxry1#
这里有一个更大的问题,那就是你的字段是否应该一开始就可以为空。通常你可以通过不让字段为空来解决这个问题,这将迫使你在插入/更新的时候而不是在显示它的时候放入一个空字符串。然而,我确实意识到,允许数据库中为空,但在返回资源时从不返回它们是合理的。
这就是说,你可以解决你的问题如下:
正如Dvek提到的,这可以缩短为
$this->text ? : ''
,但有一个小警告,$this->text ? : ''
将返回''
的所有值$this->text
是 falsey,并不一定是空。在您的特定情况下,因为文本是字符串或空,它将是相同的,但这并不总是正确的。yhxst69z2#
如果你使用php7,那么你应该能够使用双问号操作符:
idv4meu83#
你可以用你的数据库结构来解决;
gz5pxeao4#
更改列并将空字符串设置为该列的默认值。这样,当您保存没有任何值的列时,它将为该列存储空字符串。
jvlzgdj95#
你可以试试这个解决方案,它会把嵌套数组null中的每个值都转换成空字符串
第一个月
cu6pst1q6#
您只需要在资源中的任何可空字段之前添加
( string )
,它将转换为空字符串'person' => ( string )$this->person