我正在使用Fractal laravel package作为复杂数据输出的演示和转换层。
我写了UserTransformer
这样的话:
public function transform(User $user)
{
return [
'user_id' => (int)$user->user_id,
'name' => $user->name,
'family' => $user->family,
'username' => $user->username,
'token' => $user->token,
'mobile' => $user->mobile,
'email' => $user->email,
'sex' => $user->sex,
'tel' => $user->tel,
'province' => $user->province,
'city' => $user->city,
'picture' => $user->picture,
'birthday' => $user->birthday,
'wedding_date' => $user->wedding_date,
'wife_birthday' => $user->wife_birthday,
'desc' => $user->desc,
'active' => (bool) $user->active,
'supervisor' => $user->supervisor,
'two_factor_enabled' => (bool) $user->two_factor_enabled,
'address' => $user->address,
'created_at' => $user->created_at,
];
}
现在在某些情况下,我想将User
模型的特定字段作为这样的集合返回:
public function index()
{
return $this->collection(User::get(['user_id','name','family','username','created_at']), new UserTransformer());
}
但在这种情况下结果是这样的:
"result": [
{
"user_id": 1,
"name": "ahmad",
"family": "badpey",
"username": "09139616246",
"token": null,
"mobile": null,
"email": null,
"sex": null,
"tel": null,
"province": null,
"city": null,
"picture": null,
"birthday": null,
"wedding_date": null,
"wife_birthday": null,
"desc": null,
"active": false,
"supervisor": null,
"two_factor_enabled": false,
"address": null,
"created_at": {
"date": "2017-11-15 10:01:24.000000",
"timezone_type": 3,
"timezone": "Asia/Tehran"
}
}
]
正如您可以看到未包含在选择User
模型中的字段,具有null
值并返回。但我想只包含字段返回。我怎样才能做到这一点 ?
答案 0 :(得分:3)
使用数组过滤器删除它们,类似这样
public function transform(User $user)
{
return array_filter([
'user_id' => (int)$user->user_id,
'name' => $user->name,
'family' => $user->family,
'username' => $user->username,
'token' => $user->token,
'mobile' => $user->mobile,
'email' => $user->email,
'sex' => $user->sex,
'tel' => $user->tel,
'province' => $user->province,
'city' => $user->city,
'picture' => $user->picture,
'birthday' => $user->birthday,
'wedding_date' => $user->wedding_date,
'wife_birthday' => $user->wife_birthday,
'desc' => $user->desc,
'active' => (bool) $user->active,
'supervisor' => $user->supervisor,
'two_factor_enabled' => (bool) $user->two_factor_enabled,
'address' => $user->address,
'created_at' => $user->created_at,
], function($item){
return !is_null($item);
});
}
作为一个说明,我不会使用Laravel,但这通常是您从数组中批量删除内容的方式。
http://php.net/manual/en/function.array-filter.php
迭代数组中的每个值,将它们传递给回调函数。如果回调函数返回true,则将数组中的当前值返回到结果数组中。数组键被保留。
和
http://php.net/manual/en/function.is-null.php
查找给定变量是否为NULL。如果var为null,则返回TRUE,否则返回FALSE。