Il y a deux tables dans la base de données, qui sont des relations un-à-plusieurs :
Table principale (informations de réservation) : dbo.Reservation
[ReservationID] [INT] IDENTITY(1,1) NOT NULL,
[ReservationNo] [NVARCHAR](24) NOT NULL,
......
Détails (détails de la réservation) : dbo.ReservationDetail
[ReservationDetailID] [INT] IDENTITY(1,1) NOT NULL,
[ReservationID] [INT] NOT NULL, --外键
......
Le code de Model est le suivant :
Réservation.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');
}
}
Appelez un contrôleur 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;
}
}
Le message d'erreur renvoyé par Laravel est le suivant :
"message": "Method belongsToReservation does not exist.",
"status_code": 500,
Excusez-moi, quelle en est la raison ? Est-ce un problème d'espace de noms ?
Ce que j'espère réaliser, c'est utiliser une certaine association conditionnelle de la table principale pour interroger la table détaillée et renvoyer les données de la table détaillée. L'instruction SQL de requête est la suivante :
SELECT ReservationDetail.*
FROM ReservationDetail
INNER JOIN Reservation ON Reservation.ReservationID = ReservationDetail.ReservationID
WHERE Reservation.ReservationNo = 'xxx'
Excusez-moi, experts, où est le problème ? Comment dois-je écrire la grammaire correcte ?
Une autre question est de savoir si vous souhaitez que les données renvoyées soient renvoyées en fusionnant la table principale et la table détaillée en un seul objet, par exemple :
{
"ReservationID": "1",
"ReservationNo": "201601011000",
"ReservationDetails": [
{
"ReservationDetailID": "1",
},
{
"ReservationDetailID": "2",
}
]
}
Comment rédiger une requête associée ? S'il vous plaît, donnez-moi quelques conseils, je suis très reconnaissant ! ! !
Ce n'est pas ainsi qu'il est utilisé
Si vous souhaitez l'afficher directement lors d'une requête, comme pour rejoindre, alors
Si vous souhaitez l'utiliser pour obtenir les résultats, cela équivaut à utiliser chaque élément
SELECT Reservation where Reservation.ReservationID = xxx
Manuel de référence