簡體   English   中英

laravel雄辯的模型與丁戈變壓器一對多的關系

[英]laravel eloquent models one to many relationship with dingo transformer

我的代碼是由Laravel + dingo構建的。

我有兩種一對一的關系模型:

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;

我得到以下回報

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

**

如何將主數據表和明細表的數據一起轉換?

**

我真的不了解“自定義轉換層”的工作原理,誰能給我一個例子?

非常感謝。

您可以使用分形內置支持變壓器包括。 參見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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM