cari

Rumah  >  Soal Jawab  >  teks badan

Sila beritahu saya tentang hubungan satu-ke-banyak dalam model fasih Laravel Mengapakah kaedah belongsto tidak wujud?

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! ! !

曾经蜡笔没有小新曾经蜡笔没有小新2740 hari yang lalu1299

membalas semua(1)saya akan balas

  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-16 16:54:40

    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

    balas
    0
  • Batalbalas