Sila beritahu saya tentang hubungan satu-ke-banyak dalam model fasih Laravel Mengapakah kaedah belongsto tidak wujud?
曾经蜡笔没有小新
曾经蜡笔没有小新 2017-05-16 16:52:40
0
1
1297

Terdapat dua jadual dalam pangkalan data, yang merupakan perhubungan satu dengan banyak:

Meja utama (maklumat tempahan): dbo.Tempahan

    [ReservationID] [INT] IDENTITY(1,1) NOT NULL,
    [ReservationNo] [NVARCHAR](24) NOT NULL,
    ......

Butiran (butiran tempahan): dbo.ReservationDetail

    [ReservationDetailID] [INT] IDENTITY(1,1) NOT NULL,
    [ReservationID] [INT] NOT NULL,                          --外键
    ......
Kod

Model adalah seperti berikut:

Tempahan.php

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

Butiran Tempahan.php

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

}

Panggil pengawal API

<?php

namespace App\Api\Controllers;

use App\Models\Reservation;
use App\Models\ReservationDetail;
use App\Http\Requests;

class ReservationController extends BaseController
{

    public function showByReservationNo($reservation_no)
    {

        $reservation_details = ReservationDetail::all()
            ->belongsToReservation()
            ->where('ReservationNo', '=', $reservation_no)
            ->get();

        return $reservation_details;
    }
}

Mesej ralat yang dikembalikan oleh Laravel adalah seperti berikut:

  "message": "Method belongsToReservation does not exist.",
  "status_code": 500,

Maaf, apakah sebab ini?

Apa yang saya harap dapat dicapai ialah menggunakan perkaitan bersyarat tertentu bagi jadual utama untuk menanyakan jadual terperinci dan mengembalikan data jadual terperinci Pernyataan SQL pertanyaan adalah seperti berikut:

SELECT ReservationDetail.*
FROM ReservationDetail
INNER JOIN Reservation ON Reservation.ReservationID = ReservationDetail.ReservationID
WHERE Reservation.ReservationNo = 'xxx'

Maaf, pakar, di mana masalahnya? Bagaimanakah tatabahasa yang betul harus ditulis?

Soalan lain ialah jika anda mahu data dikembalikan untuk dipulangkan dengan menggabungkan jadual utama dan jadual perincian menjadi satu objek, contohnya:

{
  "ReservationID": "1", 
  "ReservationNo": "201601011000", 
  "ReservationDetails": [
    {
      "ReservationDetailID": "1", 
    }, 
    {
      "ReservationDetailID": "2", 
    }
  ]
}

Bagaimana untuk menulis pertanyaan berkaitan? Tolong beri saya nasihat, terima kasih banyak! ! !

曾经蜡笔没有小新
曾经蜡笔没有小新

membalas semua(1)
过去多啦不再A梦

Bukan itu cara ia digunakan
Jika anda ingin membawanya keluar terus semasa membuat pertanyaan, sama seperti menyertai, maka

    public function showByReservationNo($reservation_no)
    {

        $reservation_details = ReservationDetail::where('ReservationNo', '=', $reservation_no)
            ->with('belongsToReservation')
            ->get();

        return $reservation_details;
    }

Jika anda ingin menggunakannya apabila mendapat hasil, ia adalah setara dengan menggunakan setiap itemSELECT Reservation where Reservation.ReservationID = xxx

    public function showByReservationNo($reservation_no)
    {

        $reservation_details = ReservationDetail::where('ReservationNo', '=', $reservation_no)
            ->get();

        foreach($reservation_details as $reservation_detail){
            $reservation = $reservation_detail->belongsToReservation;
            //todo: something you need
        }
        return $reservation_details;
    }

Manual Rujukan

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan