热切加载:在具有雄辩关系的枢轴上使用“with”

2024-02-12

有4张表:

  • bundles: 身份证号、姓名
  • products: 身份证号、姓名
  • prices: 身份证号、姓名
  • bundle_product:id、bundle_id、product_id、price_id

有3种型号:

  • Bundle
  • Product
  • Price

A Product has a Price当在一个Bundle。我想拥有一切bundles与他们相关的products 以及相关的prices.我可以获得所有捆绑包及其产品和价格 ID:

// I created a Bundle Model with a products method
class Bundle extends Model
{
    public function products()
    {
        return $this->belongsToMany(Product::class)->withPivot('price_id');
    }
}

// Then I call this in a controller
$all_bundles = Bundle::with('products')->get();

// Then I can get the price Id of the first product of the first bundle
$price_id = Bundle::with('products')->first()
    ->products()->first()
    ->pivot->price_id;

但我不想要price id, 我想要价格 型号。有没有办法从枢轴预加载价格(使用预加载)?


当前接受的答案偏离了原始数据结构。 我创建了一个包,它可以帮助您实现您想要的,并且它还保留了原始的数据结构。请在这里阅读我的媒体故事:https://medium.com/@ajcastro29/laravel-eloquent-eager-load-pivot-relations-dba579f3fd3a https://medium.com/@ajcastro29/laravel-eloquent-eager-load-pivot-relations-dba579f3fd3a

首先,根据您的情况创建自定义枢轴模型并定义枢轴模型上的关系:

use Illuminate\Database\Eloquent\Relations\Pivot;

class BundleProduct extends Pivot
{
    public function price()
    {
        return $this->belongsTo(Price::class);
    }
}

然后在关系中使用枢轴模型:

class Bundle extends Model
{
    public function products()
    {
        return $this->belongsToMany(Product::class)
        ->withPivot('price_id') // this is needed to query the relation `price`
        ->using(BundleProduct::class);
    }
}

确保你使用了这个特质AjCastro\EagerLoadPivotRelations\EagerLoadPivotTrait in the Product模型,因为它是belongsToMany关系中的相关模型。这让我们能够立即加载枢轴关系。

use AjCastro\EagerLoadPivotRelations\EagerLoadPivotTrait;

class Product extends Model 
{
  use EagerLoadPivotTrait;
}

然后像这样急切地加载它:

$bundle = Bundle::with('products.pivot.price')->first();
$price = $bundle->products->first()->pivot->price;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

热切加载:在具有雄辩关系的枢轴上使用“with” 的相关文章

随机推荐

  • Android Scrollview 具有 videoview 会出现问题

    我有一个位于滚动视图内的视频视图 当我滚动滚动视图时 视频视图不会随之滚动 就好像它的位置是固定的一样 这是我的布局
  • 如何从 C# 中的 URL 下载文件?

    从 URL 路径下载文件的简单方法是什么 using var client new WebClient client DownloadFile http example com file song a mpeg a mpeg
  • 量角器需要密码才能登录 => 不安全?

    我开始使用 Protractor 进行 e2e 测试 要测试某些页面 我首先需要登录 现在我有这部分用于输入密码 var passInput element by id Passwd passInput sendKeys test 现在 当
  • 如何获取 eq() 值?

    这可能吗 为了让我得到eq 价值 例如 如果我单击li eq 2 var x会变成2 这是代码 numbers ul li click function x this eq val alert x The index what is thi
  • 从 Uri 转换位图返回 null [重复]

    这个问题在这里已经有答案了 在我的 Android 应用程序中 我使用 Google 驱动器来选择图像和文件 对于文件 我的代码在大多数情况下都运行良好 不幸的是 在某些情况下图像导入不起作用 图像位图返回空值 下面是我用来将内容 URI
  • 我们如何处理 BDD 场景的微小排列?

    我喜欢 BDD 开发方法 但我遇到了一个问题 即该方法能走多远 这条来自 ThoughtWorks 的最新评论Radar http thoughtworks fileburst com assets thoughtworks tech ra
  • 使用 Guice AOP 在 Jersey 中进行方法拦截

    是否可以使用 Guice AOP 拦截 Jersey 资源上的带注释的方法 我已经成功配置了 Guice 与 Jersey 的依赖注入集成 没有任何问题 但是我配置的拦截器根本没有拦截我带注释的方法 web xml
  • 在 Bootstrap 3 的弹出窗口中放置一个表单? [复制]

    这个问题在这里已经有答案了 如何在 Bootstrap 3 中的弹出窗口中放置表单 a href class btn btn lg btn danger title Click It a 它给出了如下效果 我想在它的体内放置一个形式 我们怎
  • Rails 与非 Rails 数据库设计

    完全新手研究 Rails Rails 是否可以与不符合 Rails 默认命名和设计约定的只读模式一起使用 例如 我的数据库架构具有使用字符串列作为唯一主键的基表 例如 名为 Jobs 的基表可能具有定义为 Jobs Job 的唯一主键 并且
  • IntelliJ Idea - 在调试器中搜索值

    我需要知道是否可以在 IntelliJ Idea 的调试器中搜索值 示例 您有一个巨大的对象树 您需要找到设置为相同特定值的字符串变量 有什么办法可以做到这一点吗 展开此树以便您可以看到所有这些字符串 然后开始输入您要搜索的内容 快速搜索应
  • 在嵌套片段中使用 OptionsMenu

    我使用在我的主机活动中实现的 NavigationDrawer 模式菜单活动 我的导航有 3 个项目 项目 1 项目 2 项目 3 每个项目都绑定到一个片段 当我单击 Item 1 时 我显示了一个片段 A 它实现了具有多个片段 嵌套片段
  • 访问抽象类 (Scala) 中构造函数创建的字段

    我有一个实现一种方法的抽象类 我如何访问参数internalValue 由抽象类构造函数设置 abstract class Value internalValue Int def equal v Value Boolean def notE
  • 如何查询以二进制形式存储在数据库中的 UUID(JPA/Hibernate/MySQL)

    我有一个基于 Java JPA Hibernate MySQL 的应用程序 我想使用 UUID 进行对象标识 但我想确保数据库性能不会受到影响 我发现了这篇很棒的博客文章JPA 和 UUID 主键 http www thebinaryidi
  • 如何在ag-grid中动态设置行高和列宽

    我已经使用它来尝试适应列和行的宽度 如何在ag grid中动态设置行高和列宽 请在typescript中提供git hub代码 我假设您想根据行的内容设置行高 步骤 1 将 getRowHeight 属性设置为 JavaScript 函数
  • 在编译时强制存在无参构造函数 (Java)

    我有一堂课有点像这样 public class Test private final List
  • 即使在应用程序中设置核心,Spark UI 也显示 0 核心

    我在运行 Spark Master url 之外的应用程序时遇到了一个奇怪的问题 其中 UI 无限期地报告 等待 的 状态 因为无论我将核心计数配置为什么 正在运行的应用程序 表下都会显示 0 个核心是 我已经使用以下设置配置了我的应用程序
  • 获取 macOS 上当前用户的桌面路径

    I use NSArray paths NSSearchPathForDirectoriesInDomains NSDesktopDirectory NSUserDomainMask YES NSString theDesktopPath
  • Maven Jetty 垃圾邮件警告“从多个位置扫描”

    我发现了类似的问题here https stackoverflow com questions 50190689 maven scanned from multiple locations type of warnings 但它指向一个我没
  • 如何暂时禁用 Coq 中的符号

    当您熟悉项目时 符号很方便 但当您刚刚开始使用代码库时 符号可能会令人困惑 我知道你可以用白话关闭所有符号Set Printing All 但是 我想保留一些打印 例如隐式参数 全部打印如下 Require Import Utf8 core
  • 热切加载:在具有雄辩关系的枢轴上使用“with”

    有4张表 bundles 身份证号 姓名 products 身份证号 姓名 prices 身份证号 姓名 bundle product id bundle id product id price id 有3种型号 Bundle Produc