【问题标题】:Conditional Attributes in Fractal laravel transformers分形 laravel 转换器中的条件属性
【发布时间】:2017-12-09 13:29:58
【问题描述】:

我使用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 值并返回。但我只想包含字段返回。我怎样才能做到这一点 ?

【问题讨论】:

    标签: php laravel laravel-5.5 thephpleague-fractal


    【解决方案1】:

    使用数组过滤器去除它们,像这样

    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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-21
      • 1970-01-01
      • 2017-01-13
      • 2011-01-06
      • 2013-06-21
      • 2011-08-23
      • 2016-03-05
      • 2016-03-09
      相关资源
      最近更新 更多