2017-12-09 14 views
1

복잡한 데이터 출력을위한 프리젠 테이션 및 변환 레이어로 Fractal laravel package을 사용하고 있습니다.프랙탈 laravel 변압기의 조건부 속성

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()); 
    } 

그러나이 경우 결과에

나는 이런 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 값을 가지고 반환됩니다. 하지만 나는 오직 필드 반환을 원한다. 내가 어떻게 할 수 있니?

답변

1

를 사용하여 배열 필터는 그러나 이것은 당신이 배열에서 대량으로 물건을 제거하는 방법 일반적으로, 나는 Laravel를 사용하지 않는 참고로이

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); 
     }); 
    } 

처럼 뭔가를 제거합니다.

http://php.net/manual/en/function.array-filter.php

콜백 함수로 전달 배열의 각 값 위에

반복합니다. 콜백 함수가 true를 반환하면 array의 현재 값이 결과 배열로 반환됩니다. 배열 키는 보존됩니다.

http://php.net/manual/en/function.is-null.php

그리고

는 주어진 변수가 NULL인지 확인합니다. var가 null이면 TRUE를, 그렇지 않으면 FALSE를 반환합니다.