Erzählen Sie mir bitte etwas über die Eins-zu-Viele-Beziehung im eloquenten Modell von Laravel. Warum wird angezeigt, dass die Methode „Gehört zu' nicht existiert?
曾经蜡笔没有小新
曾经蜡笔没有小新 2017-05-16 16:52:40
0
1
1335

Es gibt zwei Tabellen in der Datenbank, bei denen es sich um Eins-zu-Viele-Beziehungen handelt:

Haupttabelle (Reservierungsinformationen): dbo.Reservation

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

Details (Reservierungsdetails): dbo.ReservationDetail

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

Model lautet wie folgt:

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

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

}

Rufen Sie einen API-Controller ein

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

Die von Laravel zurückgegebene Fehlermeldung lautet wie folgt:

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

Entschuldigung, was ist der Grund dafür? Ist es ein Namespace-Problem?

Was ich erreichen möchte, ist, eine bestimmte bedingte Zuordnung der Haupttabelle zu verwenden, um die detaillierte Tabelle abzufragen und die Daten der detaillierten Tabelle zurückzugeben. Die Abfrage-SQL-Anweisung lautet wie folgt:

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

Entschuldigung, Experten, wo liegt das Problem? Wie sollte die richtige Grammatik geschrieben werden?

Eine weitere Frage ist, ob die zurückgegebenen Daten durch Zusammenführen der Haupttabelle und der Detailtabelle in einem Objekt zurückgegeben werden sollen, zum Beispiel:

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

Wie schreibe ich eine entsprechende Abfrage? Bitte geben Sie mir einen Rat, vielen Dank! ! !

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

Antworte allen(1)
过去多啦不再A梦

不是这么用的
如果你要在查询的时候直接带出去,类似join,那就

    public function showByReservationNo($reservation_no)
    {

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

        return $reservation_details;
    }

如果你要在取结果的时候用,就是相当于用的时候每条都SELECT 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;
    }

参考手册

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage