我有以下表格

1.Shops  (shop_id , company_id , name, latitude, logntitude, phone)

2.packages(package_id, company_id, cost, value, expire_date)

3.shop_packages (package_id, shop_id)

我正在try 访问与以下包相关的store

Package Model

public  function  shop():BelongsToMany{
    return $this->belongsToMany(Shop::class,'shop_packages','package_id','package_id');
}

Shop Model

 public  function  package(){
  return   $this->belongsToMany(Package::class,'shop_packages','shop_id','shop_id');
}

现在,当我在下面try 时,当有可用数据时,它返回我的店铺,结果为空,

 Package::with('shop')->where('package_id',$request['package_id'])->first();

我正在使用laravel 8.此项目的x.有人能帮我解决这个问题吗

Shop Table

enter image description here

Package Table

enter image description here

shop_packages shop_packages

推荐答案

您在关系中输入了错误的外键.belongsToMany关系应该这样声明

Package Model

public  function  shops():BelongsToMany{
    return $this->belongsToMany(Shop::class,'shop_packages','package_id','shop_id');
    //you can also just ignore the foreign keys since they follow naming standards
    //return $this->belongsToMany(Shop::class,'shop_packages');
}

Shop Model

 public  function  packages(){
    return $this->belongsToMany(Package::class,'shop_packages','shop_id','package_id');
    //same here
    //return $this->belongsToMany(Package::class,'shop_packages');
}

你也应该使用复数来更好地表达多对多关系

Package::with('shops')->where('package_id',$request['package_id'])->first();

Laravel相关问答推荐

Laravel Livewire与自定义JS有关的多姆问题

vagrant会损坏你的电脑. | macOS v12(蒙特雷)#13132

使用两个日期之间的范围获取两列之间的记录,同时搜索过滤条件

通过 laravel 中的 url 传递多个字符串作为参数以从数据库中删除特定数据

Laravel Livewire 组件属性在 div 类中为空

运行Docker时,安装PHP8.1时返回错误

如何在数据来自Rest API的flutter中创建下拉类别名称列表?

在 laravel 中查询此类数据的最佳做法是什么?

插入重复键时,laravel eloquent 忽略错误

Heroku 上的 Laravel 队列工作者

Laravel - 如何恢复本地存储符号链接并刷新

用 laravel 表单确认删除?

Laravel Eloquent Pluck 不丢失密钥

Laravel 从现有模型生成迁移

Laravel 应用程序中应用程序键的意义是什么?

Laravel / Eloquent内存泄漏重复检索相同的记录

嘲笑没有匹配的关闭处理程序

Laravel 5 默认注册后如何发送邮件?

在哪里放置 Blade::extend

如何在 laravel 表单验证错误消息中给出自定义字段名称