2016-06-06 4 views
0

내 코드는 Laravel + dingo에 의해 구성됩니다.laravel eloquent 모델 딩고 변압기와 일대 다 관계

나는 많은 관계로 하나를 두 모델을 가지고 :

Reservation.php (마스터)

namespace App\Models; 

use Illuminate\Database\Eloquent\Model; 

class Reservation extends Model 
{ 
    protected $table = 'dbo.Reservation'; 

    public function hasManyReservationDetails() 
    { 
     return $this->hasMany('App\Models\ReservationDetail', 'ReservationID', 'ReservationID'); 
    } 
} 

ReservationDetail.php (세부 사항)

namespace App\Models; 

use Illuminate\Database\Eloquent\Model; 

class ReservationDetail extends Model 
{ 
    protected $table = 'dbo.ReservationDetail'; 

    public function belongsToReservation() 
    { 
     return $this->belongsTo('App\Models\Reservation', 'ReservationID', 'ReservationDetailID'); 
    } 

} 

그리고 두 변압기 두 모델은 다음과 같습니다 :

ReservationTransformer

public function transform(Reservation $reservation) 
{ 
    return [ 
     'reservation_id'  => (int) $reservation->ReservationID, 
     'reservation_no'  => $reservation->ReservationNo, 
    ]; 
} 

ReservationDetail 변압기

public function transform(ReservationDetail $reservation_detail) 
{ 
    return [ 
     'reservation_detail_id' => (int) $reservation_detail->ReservationDetailID, 
     'reservation_id'  => (int) $reservation_detail->ReservationID, 
     'room_no'    => $reservation_detail->RoomNo, 
    ]; 
} 

내 컨트롤러 및 문의

$reservation = Reservation::where('ReservationNo', '=', $reservation_no) 
     ->with('ReservationDetails') 
     ->get(); 
    return $reservation; 

I

{ 
    "Reservations": [ 
    { 
     "ReservationID": "1", 
     "ReservationNo": "2016-06-01 16:50:59.0659", 
     "reservation_details": [ 
     { 
      "ReservationDetailID": "1", 
      "ReservationID": "1", 
      "RoomNo": "001", 
     }, 
     { 
      "ReservationDetailID": "2", 
      "ReservationID": "1", 
      "RoomNo": "002", 
     } 
     ] 
    } 
    ] 
} 

내가 다음 만 마스터의 번역을 반환하려고 다음과 같은 수익을 얻을 표.

$reservation = $this->collection($reservation, new ReservationTransformer()); 

**

어떻게 함께 마스터 및 세부 테이블의 데이터를 변환 할 수 있습니까?

**

정말 '사용자 정의 변환 레이어가'작동 방식을 이해하고 있지 않다

는, 사람이 사람이 나에게 예를 줄 수 있습니까?

많은 감사.

답변

1

변압기 포함에 대한 프랙털 빌드를 사용할 수 있습니다. http://fractal.thephpleague.com/transformers/

public function hasManyReservationDetails()에서 public function reservationDetails()으로 이름을 바꾸면됩니다.

다음 ReservationTransformer은 나머지 처리 소요됩니다 :

use League\Fractal\TransformerAbstract; 

class ReservationTransformer extends TransformerAbstract 
{ 
    /** 
    * List of resources to automatically include 
    * 
    * @var array 
    */ 
    protected $defaultIncludes = [ 
     'reservationDetails', 
    ]; 

    public function transform(Reservation $reservation) 
    { 
     return [ 
      'reservation_id'  => (int) $reservation->ReservationID, 
      'reservation_no'  => $reservation->ReservationNo, 
     ]; 
    } 

    /** 
    * Include ReservationDetail 
    * 
    * @param Reservation $reservation 
    * 
    * @return League\Fractal\Resource\Collection 
    */ 
    public function includeReservationDetails(Reservation $reservation) 
    { 
     return $this->collection($reservation->reservationDetails, new ReservationDetailTransformer); 
    } 
}