请教Laravel eloquent model一对多关联关系,提示belongsto方法不存在的原因?

发布于 2022-09-02 20:15:30 字数 2414 浏览 11 评论 0

数据库中有两个表,分别为一对多关系:

主表(预约信息):dbo.Reservation

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

明细表(预约明细):dbo.ReservationDetail

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

Model的代码如下:

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

}

在一个API的controller里面调用

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

Laravel返回的错误信息如下:

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

请问这是什么原因,是不是namespace的问题?

我希望实现的是用主表的某个条件关联去查询明细表,返回明细表的数据,查询的SQL语句如下:

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

请问各位大牛,问题出在什么地方?准确的语法应该怎么写?

另一个问题是,如果希望返回的数据是将主表和明细表合并成一个对象返回,例如:

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

关联查询应该怎么写?请各位大牛赐教,感激涕零!!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冷情 2022-09-09 20:15:30

不是这么用的
如果你要在查询的时候直接带出去,类似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;
    }

参考手册

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文