0

私のコードは Laravel+dingo によって構築されています。

1対多の関係である2つのモデルがあります:

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

}

そして、次のように 2 つのモデル用の 2 つのトランスフォーマー:

予約トランスフォーマー

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;

次のリターンを取得します

{
  "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());

**

マスター テーブルとディテール テーブルのデータを一緒に変換するにはどうすればよいですか?

**

「カスタム変換レイヤー」がどのように機能するかよくわかりません。例を挙げてくれる人はいますか?

どうもありがとう。

4

1 に答える 1

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);
    }
}
于 2016-07-15T14:00:10.347 に答える