Php 在Laravel中将从查询生成器接收的NULL转换为空字符串

Php 在Laravel中将从查询生成器接收的NULL转换为空字符串,php,laravel,Php,Laravel,这是一个示例数据库来说明我的问题。我有一个表,其中有一些字段(事实上有很多字段)是可选的,并且没有设置为任何默认值。所以当我这样做时,很明显 $user = DB::table('users') ->select('*') ->where('id', $user_id) ->first(); 为这些字段提供空值 ["id"]=> int(120) ["name"]=> string(4) "jack" ["email"]=> str

这是一个示例数据库来说明我的问题。我有一个表,其中有一些字段(事实上有很多字段)是可选的,并且没有设置为任何默认值。所以当我这样做时,很明显

$user =  DB::table('users')
    ->select('*')
    ->where('id', $user_id)
    ->first();
为这些字段提供空值

["id"]=>
int(120)
["name"]=>
string(4) "jack"
["email"]=>
string(12) "jack@example.com"
["mobile"]=>
string(11) "+4400123456"
["facebook_link"]=>
NULL
["twitter_link"]=>
NULL
["instagram_link"]=>
NULL
["youtube_link"]=>
NULL
这是一个问题,因为我将把它作为json API响应发送,而移动团队不太愿意看到空值,他们宁愿选择空字符串(“”)。那么,我是否会像现在这样不手动检查每个字段就这样做呢

$user->facebook_link = !empty($user->facebook_link)? $user->facebook_link: '';

您可能会说,只需很好地分配默认列即可,但由于它是一个远程数据库,这将需要更多的时间。目前,我的最佳选择是COALESCE,但我希望在laravel本身中进行一些调整,以解决此问题

似乎除了在用户模型中定义
访问器
方法外,没有其他方法本身:

public function getFacebookLinkAttribute($value)
{
  return $value ?: 'default value';
}
使用这种方法,您只需要在模型内部设置一次,而不是在每个查询上进行
COALESCE
。但是请记住,当您在代码中访问它时,它将返回默认值

另一种方法是使用
资源
transformer(fractal)
,它可能不是您需要的,但值得一看


如果有办法解决这个问题,请纠正我。

不幸的是,您使用的是QueryBuilder而不是ORM

所以在ORM中有多种方法,比如强制转换或访问器

$casts = [
    'facebook_link' => 'string'
]

public function getFacebookLinkAttribute($value)
{
  return (string)$value; 
}