2016-06-06 21 views
0

meine Codes werden von Laravel + Dingo erstellt.Laravel eloquent Modelle eins zu viele Beziehung mit Dingo Transformator

Ich habe zwei Modelle, die man zu viele Beziehung sind:

Reservation.php (Master)

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 (Detail)

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

} 

und zwei Transformatoren für die zwei Modelle wie folgt:

ReservationTransformer

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

ReservationDetail Transformator

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, 
    ]; 
} 

Mein Controller und erkundigen

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

erhalte ich die folgende Rückkehr

{ 
    "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", 
     } 
     ] 
    } 
    ] 
} 

Ich versuche, die folgenden aber nur die Übersetzung von Master zurückkehren Tabelle.

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

**

Wie kann ich die Daten von Master und Detailtabelle zusammen verwandeln?

**

ich nicht wirklich bin verstehen, wie ‚Custom Transformationsschicht‘ arbeitet, jeder, der ein Beispiel geben kann mir?

Vielen Dank.

Antwort

1

Sie können Fraktale verwenden, die für Transformer Includes erstellt wurden. Siehe http://fractal.thephpleague.com/transformers/

Ich würde mit der Umbenennung public function hasManyReservationDetails() zu public function reservationDetails() beginnen.

Und dann wird Ihr ReservationTransformer der Rest kümmern:

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