Laravel 嵌套关系

2023-11-23

我无法让非常嵌套的关系在 laravel 中正常工作。

想要的行为如下,

我通过 ID 选择一个事件,并且想查看哪些人订阅了该事件。现在的问题是事件和人之间有一些表。

这是有效的查询!

SELECT persons.id, 
       persons.firstname, 
       persons.lastname, 
       event_scores.score 
FROM   events 
       JOIN cities 
         ON cities.id = events.city_id 
       JOIN companies 
         ON cities.id = companies.city_id 
       JOIN persons 
         ON companies.id = persons.company_id 
       JOIN event_scores 
         ON event_scores.person_id = persons.id 
WHERE  event_scores.event_id = 1 
GROUP  BY persons.id 

这些是我的关系

事件模型

class Event extends Eloquent
{
    protected $table = 'events';

    public function city()
    {
        return $this->belongsTo('City');
    }
}

城市模型

class City extends Eloquent
{
    protected $table = 'cities';

    public function companies()
    {
        return $this->hasMany('Company');
    }

    public function event()
    {
        return $this->hasMany('Event');
    }
}

公司模式

class Company extends Eloquent {

    protected $table = 'companies';

    public function persons()
    {
        return $this->hasMany('Person');
    }

    public function city()
    {
        return $this->belongsTo('City');
    }
}

人物模型

class Person extends Eloquent
{
    protected $table = 'persons';

    public function company()
    {
        return $this->belongsTo('Company');
    }

    public function eventscore()
    {
        return $this->belongsToMany('Event', 'event_scores', 'person_id', 'event_id')
            ->withPivot('score')
            ->withTimestamps();
    }
}

我尝试过的

return Event::with('city')->with('company')->get();

and

return Event::with('city')
    ->whereHas('companies', function($query) use ($company_id){
        $query->where('company_id', $company_id);
    })->get();

还有很多其他的可能性,我真的很纠结这个。在laravel中实现这种嵌套关系链接有这么难吗?

Thanks!


return Event::with('city.companies.persons')->get();

如果您只想从列表中选择某些字段persons表,使用这个:

return Event::with(['city.companies.persons' => function ($query) {
    $query->select('id', '...');
}])->get();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Laravel 嵌套关系 的相关文章

  • PHP、jQuery 和 Ajax 调用乱序

    我正在使用 jQuery 进行 Ajax 调用 我有 x 数量的 Ajax 调用附加到 div 这些 Ajax 加载请求是由 PHP foreach 循环生成的 问题是它们渲染的顺序不正确 它们被设置在数组中
  • 尝试获取 Google accessToken

    看起来 无论我做什么 谷歌都在竭尽全力阻止我完成这个研究项目 我的项目让我使用 Google 电子表格作为数据库 并使用所述电子表格中的数据执行程序化的 Google 图片搜索 并向最终用户显示一些结果 设置说明 我开始按照此处的说明进行操
  • 删除 woocommerce 店面主页标题 php

    我正在使用 woocommerce 的店面主题 我需要用 php 删除主页标题 h1 我知道 css 解决方案 但我不想使用它 因为我想将 h1 添加到该页面的其他位置 并且在一个页面中包含 2 个 h1 对 seo 不利页 我也知道删除页
  • 什么是“数据库实体”以及哪些类型的 DBMS 项目被视为实体? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 具有更改用户代理上下文的 file_get_contents 不起作用

    我正在尝试获取页面的阅读数和点赞数 网址是 https mp weixin qq com s NPavBeHc8VdWXeSL6kfLRg https mp weixin qq com s NPavBeHc8VdWXeSL6kfLRg 您必
  • 从对象定义生成数据库表

    我知道有几种 自动 方法可以创建数据访问层来操作现有数据库 LINQ to SQL Hibernate 等 但我有点厌倦了 我相信应该有更好的做事方式 比如 在 Visio 中创建 更改表 使用 Visio 的 更新数据库 创建 更改数据库
  • Windows iis 7.0 上的 APC 不稳定

    我的 IIS 非常不稳定 因为它总是由于某种与 APC 相关的原因而重新启动 服务器的规格如下 Intel R Xeon CPU 3GHZ 3GHZ 2GB RAM 64bit APC 和服务器规格 3 1 7 dev PHP Versio
  • 从 Grib 天气模型中提取数据

    我已经下载了grib1模型数据来自GFS http en wikipedia org wiki Global Forecast System 我使用的是 Mac OS X 并且能够构建wgrib2文件来自NOAA http en wikip
  • PHP 错误:“无法通过引用传递参数 2”

    我只是需要有关这个 PHP 错误的帮助 我不太明白 致命错误 无法在第 13 行 web stud openup inactivatesession php 中通过引用传递参数 2
  • 简单的dom php解析获取自定义数据属性值

    HTML div class something ddsf PHP foreach dom gt find something data rel as this var dump this gt attr 我尝试了这个但错误 在其文档中找不
  • 使用 PHP 和 OAuth 访问 SkyDrive

    我想使用 PHP 访问 skyDrive 我想检索文件和文件夹列表 下载 上传和删除文件 我有一个 microsoft dev clientID 和 clientSecret 有人可以帮助我开始使用 OAuth 连接到 skyDrive 并
  • mysql表中的数据非常大。即使 select 语句也需要很多时间

    我正在开发一个数据库 它是一个相当大的数据库 有 13 亿行和大约 35 列 这是我检查表状态后得到的结果 Name Table Name Engine InnoDB Version 10 Row format Compact Rows 1
  • MySQL 将表从 Latin1 转换为 utf8

    我需要将包含大量数据的表从 Latin1 转换为 utf8 以便它可以接受韩语字符 如何更改该表而不损坏其中的数据 我的 SQL 语句是什么 最好的方法是什么 ALTER TABLE database name table name CON
  • PHP 中的多个插入查询[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个 php html 表单 它将结果插入到狗展数据库中 问题是 无论我做什么 我都会收到此错误 查询失败 您的 SQL 语法有错误 检查与您的 MySQL 服务器版本相对应的手册 了解在 INSE
  • 显式删除会话cookie会产生什么影响?

    我使用 php session 来维护用户的会话 Session 在登录后创建 在注销或超时后销毁 我需要管理面板中的一个选项来强制注销任何用户 如果他在网站上处于活动状态 我怎样才能做到这一点 我正在考虑删除临时会话文件 这应该有效地破坏
  • Doctrine DQL 从 join 返回平面数组

    我通过 DQL 中的常规 LEFT JOIN 选择 3 个实体 它们通过连接表关联 连接表还定义了实体以及带注释的关系 查询执行没有问题 但我的结果作为平面数组返回 我期望一个包含三个实体作为每个索引的数组元素的数组 SELECT e1 e
  • dbms_xmlgen.getxml - 如何设置日期格式

    我们使用 dbms xmlgen getxml 实用程序通过 SQL 查询生成 xml 该查询从几乎 10 15 个相关表中获取数据 默认情况下 日期格式生成于dd MMM yy格式 有什么方法可以在 dbms xmlgen getxml
  • 获取mysql中逗号分隔行中不同值的计数

    一个表 Jobs 有 2 列 JobId 城市 当我们保存工作时 工作位置可能是多个城市 如下所示 JobId City 1 New York 2 New York Ohio Virginia 3 New York Virginia 我如何
  • 更改mysql数据库表中的日期格式

    大家早上好 只是一个简单的问题 在我现有的 MySql 数据库中 我几乎没有包含日期 的列 目前这些是年 月 日格式 但现在我需要将其全部更改为年 月 日格式 我试过了select date format curdate d m Y 但它不
  • 如何在 PHP 中从字符串类名实例化? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何创建返回方法名称的新实例 不幸的是我收到这个错误 错误 类名必须是有效的对象或字符串 这是我的代码 class Foo public f

随机推荐

  • 通过原型对象或构造函数设置方法,有什么区别? [复制]

    这个问题在这里已经有答案了 您能解释一下构造函数中设置方法和通过原型对象设置方法之间的区别吗 以下代码显示了这两种设置方法的方式 say hello and say bye两者都工作正常 function MessageClass this
  • 将 Java 数组传递给 Scala

    尽管我已经使用 Scala 一段时间 并且之前也将其与 Java 混合使用 但我还是遇到了一个问题 如何将 Java 数组传递给 Scala 我知道相反的方法相当简单 然而从 Java 到 Scala 却并非如此 我应该在 Scala 中声
  • 使用 loadDataWithBaseURL 禁用 webview 中的链接

    我使用以下代码加载电子书的 html 内容 其中 templateString 包含连接到主文件中的样式表和图像的 html 内容 String itemURL file itemPath testWV loadDataWithBaseUR
  • 修改伪选择:after在javascript中[重复]

    这个问题在这里已经有答案了 我定义了一个像 slidingTag li after content z index 3 height 6px 我想从 JS 动态更改高度属性 我可以使用以下方式获得该财产 window getComputed
  • 在 Matlab 中使用 Java 泛型类

    是否可以在Matlab中构造一个参数化类 例如在Java中我可以说ArrayList
  • 如何在Android 2.1中实现Beluga或WhatsApp之类的消息系统

    我正在尝试在我的 Android 应用程序中开发一个消息应用程序 该消息将像 Whatsapp 和 beluga 一样 我用谷歌搜索了一下 发现 C2DM Android 2 2 可以将推送通知发送到设备 但是 这在 Android 2 1
  • 无法卸载内核扩展;类有实例

    我正在为音频设备驱动程序编写 OSX 内核扩展 它是软件 但模拟硬件设备 在开发过程中 完全卸载现有的旧版本 然后从头开始构建并安装新版本会很方便 但是 有时如果不重新启动系统 这似乎是不可能的 程序本身没有运行 源文件已从 System
  • 如何在Ubuntu 14.04上挂载HDFS

    所以 我无法在 Ubuntu 14 04 上挂载 HDFS Mucommander 不工作 保险丝不工作 有人可以用图像解释我或给我一些教程 谢谢 最诚挚的问候 我今天成功地使用了Cloudera 网站上的说明 wget http arch
  • 当该文件作为卷挂载时,pgpass 文件在 pgadmin4 docker 容器中的位置

    我正在使用下面的图片https hub docker com r dpage pgadmin4 在 Ubuntu 18 04 上设置 pgAdmin4 我已经安装了一个卷 其中包含pgpass文件 这也是chmod为了pgadmin正如您在
  • Android Studio 3.3.2 中无法检测adb版本、adb输出

    我已经完成了以下任务来解决问题 下载并更新平台工具 更改Sdk路径并重新下载 重新安装后卸载了Android Sdk平台工具和Android Sdk工具 更新环境中的 adb 路径 更改虚拟内存大小 但它仍然无法正常工作 我正在使用 and
  • Emacs、unicode、xterm 鼠标转义序列和宽终端

    简短版本 当使用 emacs 的 xterm mouse mode 时 有人 emacs bash xterm 拦截 xterm 的控制序列并将其替换为 0 这对于宽显示器来说是一个痛苦 因为只有前 223 列有鼠标 罪魁祸首是什么 我该如
  • 如何将openssl生成的RSA私钥导入AndroidKeyStore

    我想将密钥导入到 AndroidKeyStore 中 所以 我可以通过 openssl 按以下方式生成它 openssl rsa text in privateKey2048 pem openssl pkcs8 topk8 inform P
  • Python:我试图找到列表中两个元素之间的最大差异

    我需要找到列表中任意两个元素之间的最大差异 在列表中 1 2 3 4 5 使用 for 循环时 最大差异为 4 元素 1 和 5 之间 该程序需要输出这两个元素 0和4 的位置及其值 1和5 我只能弄清楚如何找到连续值之间的最大差异 但是如
  • 如何告诉 CMake 在编译我的源代码之前下载外部项目

    我有自己的代码 它依赖于第三方库 例如 yaml cpp 我想在编译我自己的源代码之前下载这些第三方库 但是 我无法使用 CMake 做到这一点 我成功下载了 yaml cpp 如下所示 ExternalProject Add yaml c
  • 接口(接口/抽象类)不是抽象?

    最近 我一直在阅读一些帖子 其中讨论了接口是抽象这一假定的错误观念 其中一篇文章是http blog ploeh dk 2010 12 02 InterfacesAreNotAbstractions aspx 我有一点困惑 如果我没有接口
  • Pandas read_excel 百分比作为字符串

    我的 Excel 工作表有一列用百分比符号存储的百分比 例如 50 我该如何胁迫pandas read excel读取字符串 50 而不是将其转换为浮点数 目前read excel实现将百分比解析为浮点数 0 5 另外如果我添加一个conv
  • 何时使用存根和模拟?

    我一直有这样的困惑 如果我编写一个使用假代码来断言某些操作的代码 那么当它真正使用真实对象而不是假对象启动时 我如何信任我的真实实现 例如 我有这样的代码 Test public void CanCreateContactsWithData
  • Linq - 如何从仅包含另一个列表的项目的列表中选择项目?

    我有这两门课 public class Item public int Id get set public List
  • Tomcat 会话超时 web.xml

    这是我的 web xml 文件 它位于WEB INF lib 它指定会话超时时间为 1 分钟 但用户活动 1 分钟后不会超时 Web xml
  • Laravel 嵌套关系

    我无法让非常嵌套的关系在 laravel 中正常工作 想要的行为如下 我通过 ID 选择一个事件 并且想查看哪些人订阅了该事件 现在的问题是事件和人之间有一些表 这是有效的查询 SELECT persons id persons first