Laravel 带有约束的急切加载

2024-04-14

所以我的模型有两个简单的关系。然后急切加载就像这样完美地工作:

Entry::with('author', 'lastModifiedBy')->...;

但是假设我想添加一个带有约束的新关系。例如:

public function foo() {
    return $this->hasOne('Foo')->latest('id');
}

然后,为了急切加载这种关系,Laravel 建议这样做:

Entry::with(array('foo' => function($query) use ($id) {
    $query->where('user_id', $id);
}))->...;

但如果我想包括我的author and lastModifiedBy关系,我最终不得不做:

Entry::with(array(
    'foo' => function($query) use ($id) {
        $query->where('user_id', $id);
    },
   'author' => function() { },
   'lastModifiedBy' => function() { }
))->...;

我必须给这两个关系一个空函数。有没有一种更简单的方法来做到这一点,而不需要这些丑陋的空函数?


空函数不是必需的。 Laravel 足够聪明,能够在没有约束的情况下处理一系列混合关系。

Entry::with(array(
    'foo' => function($query) use ($id) {
        $query->where('user_id', $id);
    },
    'author',
    'lastModifiedBy'
))->...;

怎么运行的

Laravel 是这样区分两者的:

in Illuminate\Database\Eloquent\Builder@parseRelations

foreach ($relations as $name => $constraints)
{
    // If the "relation" value is actually a numeric key, we can assume that no
    // constraints have been specified for the eager load and we'll just put
    // an empty Closure with the loader so that we can treat all the same.
    if (is_numeric($name))
    {
        $f = function() {};
        list($name, $constraints) = array($constraints, $f);
    }

正如注释所描述的,如果数组项的键是数字,Laravel 实际上会自行添加空闭包。

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

Laravel 带有约束的急切加载 的相关文章

  • 如何对 Laravel Mailable 进行断言

    在测试中 我想使用以下方法对 Mailable 做出一些断言Mail assertSent 像这样 Mail assertSent MyMailable class function mail use user return mail gt
  • Laravel 如何使用查询生成器返回单列值

    我想使用 SQL 查询中的数据 为了进一步解释它 这里是我的代码 myquery DB table attendances gt select user id gt where date only newdate gt orderBy lo
  • 如何在控制器中获取 User()->id (Laravel 8+)

    我正在尝试通过以下方式选择任务用户身份 但我无法将其放入控制器 我从中选择数据DB 我尝试过很多事情 其中 一些来自堆栈溢出 但它不起作用 I tried 1 userId Auth check Auth id true 2 Auth us
  • 如何在 Laravel 中返​​回唯一值

    这里我有这个示例数据 它根据类别产品返回 我需要限制重复值 Raw JSON brand id fe877b45 8620 453a 8805 63f0cbd80752 name No Brand slug no brand descrip
  • 如何在 vue.js 中使用 SVG.js 插件?

    我在用svg js在我的 Laravel 项目中运行vue js 这就是我使用的方式svg js Step 1 安装svg js作为我的 vue 应用程序中的插件 import svgJs from svg js dist svg expo
  • PHPstorm - 无法在blade.php 文件中设置断点

    我正在开发 Laravel 应用程序 可以很好地调试我的控制器 php 文件 但我还想调试blade php 文件 在我当前的设置中 我遵循了所有 jetbrains 为 Laravel 推荐的设置 https confluence jet
  • 在 Laravel 视图中使用 CSS?

    我刚刚开始学习 Laravel 并且可以掌握控制器和路由的基础知识 我的操作系统是 Mac OS X Lion 它位于 MAMP 服务器上 我的routes php代码 Route get function return View make
  • 表单请求中的 Laravel 数组验证

    我无法验证 Form Request 类中包含数组元素的字段 规则方法 public function rules return state gt required state 0 gt required state gt required
  • 此集合实例 Laravel 关系中不存在属性 [X]

    我在 Laravel 5 6 中使用了很多 Realtions 当我添加 phonebooks 时 我看到所有关系都工作正常 一切都很好 但是当我尝试在视图中显示它们时 我得到了属性在此集合上不存在的错误 这是关系代码 public fun
  • 使用 laravel 检查活动用户状态

    这是非常标准的登录功能和验证 效果很好 但我还想检查用户是否处于活动状态 我在用户表中设置了一列 并将 活动 设置为 0 或 1 public function post login input Input all rules array
  • 使用 Laravel Fluent 查询生成器从多个表中进行选择

    我正在重写一些 PHP MySQL 来与 Laravel 一起使用 我想做的一件事是使数据库查询更加简洁使用 Fluent 查询生成器 http laravel com docs database fluent但我有点迷失 SELECT p
  • Laravel Blade - 链/嵌入多种布局

    在我最喜欢的模板框架中 它们通常具有嵌套布局的能力 这在 Blade 中是可能的吗 例如 master blade php yield content 导航 blade php extend master
  • 如何在 Laravel 中基于 application/json 标头加载路由

    我正在使用application json标头来控制我的控制器在收到请求时的行为 我需要在单元测试中的 POST 中包含application json header 我试过了 public function testStore this
  • Laravel 转义 Blade 模板中的所有 HTML

    我正在 Laravel 中构建一个小型 CMS 并尝试显示内容 存储在数据库中 它显示 HTML 标签而不是执行它们 就像所有打印数据都有一个自动 html entity decode 一样
  • 如何在 Laravel 5 中通过键获取所有缓存项的列表?

    Laravel 中的 Cache 类具有 get itemKey 等方法来从缓存中检索项目 以及 Remember itemKey myData1 myData2 来将项目保存在缓存中 还有一个方法可以检查缓存中是否存在某个项目 Cache
  • Laravel 5.3 Eloquent 事务和外键限制

    我正在从事一个更大的项目 我们在一个 Postgres 数据库中有多个模式 我们在模式之间创建了外键 这是一个例子 gt 我们有公司模式和用户模式 公司模式有company users表 该表对user users表有外键限制 CREATE
  • laravel cron 使用错误

    Laravel 错误 cron 使用 usr bin php home sitevk artisan 计划 运行 1 gt gt dev null 2 gt 1 应用 控制台 内核 use Illuminate Console Schedu
  • Composer 安装要求

    我正在尝试将 Composer 安装到 Laravel 项目中 当我做的时候sudo composer install在项目目录中它显示了两个错误 Problem 1 Installation request for simplesoftw
  • Laravel Schema Builder 改变存储引擎

    我正在尝试更改表并将其存储引擎更改为InnoDb 当我跑步时php artisan migrate它完成且没有错误 然而 当我检查 Sequel Pro 中的存储引擎时 没有任何变化 public function up Schema ta
  • 如何在 Laravel Mix 中将公共路径更改为包含下划线的路径?

    Laravel 5 4 中引入了 Mix 来编译资产并维护资产管道 Mix 默认为您的公共目录被命名public 在许多情况下 包括我的 我的公共目录被称为其他名称 就我而言 是public html 如何更改资源编译到的公共目录 我尝试过

随机推荐

  • 如何在工作区中的两个xcode项目之间共享文件?

    我了解了 Xcode 工作区 我知道如何共享静态库 但我想在工作区中的两个 Xcode 项目之间共享文件 是否可以一次运行多个目标 您能给我提供如何执行此操作的信息吗 提前致谢 即使项目位于同一级别 没有子项目 在同一工作区中的项目之间共享
  • 为什么只有第二个数组维度很重要?

    为什么在处理二维数组时只有第二维对编译器很重要 我就是无法理解这一点 谢谢 因为编译器需要弄清楚如何从内存中访问数据 第一个维度并不重要 因为当给定所有其他大小时 编译器可以计算项目的数量 例子 int a1 1 2 3 4 编译器知道为
  • SAS:如何计算除某些字符变量之外的所有字符变量的频率

    我知道我可以使用类似以下内容来计算所有字符的频率 proc freq data sashelp class tables char run 但是 有没有办法排除一些变量呢 我想做类似的事情 proc freq data sashelp cl
  • Ivy 通过 Nexus 代理

    有谁知道我如何在 Ivy 中指定 Maven 中的镜像 mirrorOf 之类的东西 我正在使用本地 Maven 代理 Nexus 并且需要该工具来指定 Nexus 代理应访问哪个父存储库 在 Maven 中我简单地做
  • 手势方法(平移手势和滑动手势)之间是否有优先级条件?

    我正在开发一个应用程序 其中使用了平移手势和滑动手势 因此 每次我执行 滑动手势 时 但总是会调用 平移手势 中的方法 而不会调用 滑动手势 方法 所有手势方法之间有优先级吗 您可以通过实现以下方法来并行调用它们UIGestureRecog
  • 如何在 android studio 中安装自定义库? [复制]

    这个问题在这里已经有答案了 我想做的是参考这个双向网格视图库 https github com jess anders two way gridview并在我的项目中使用该控件而不是标准的 gridview 它似乎没有以任何方式编译 你可以
  • 将 json 请求 POST 到 Solr,请求中带有cursorMark

    是否可以包括cursorMarkPOST 请求正文中的值而不是将其作为查询字符串参数发送 以下查询 query val abc limit 10 cursorMark sort id asc 返回一条错误消息 JSON 请求中未知的顶级键
  • Oracle设置默认NLS_LANG

    我在 RHEL6 上运行 Oracle 数据库 11g 如果没有客户端NLS LANG 则设置某些utf8字符的长度为2 设置NLS LANG AMERICAN AMERICA UTF8后 长度仅为1 如何更改整个数据库的默认 NLG LA
  • 静态变量的线程安全初始化

    我一直在使用这种模式来初始化类中的静态数据 对我来说 它看起来是线程安全的 但我知道线程问题有多么微妙 这是代码 public class MyClass bad code do not use static string myResour
  • Jasmine:测试 setTimeout 函数抛出错误

    我想测试一个方法的错误处理 该方法使用 setTimeout 安排工作 该错误将在预定部分抛出 即 function sutWithSetTimeout setTimeout function throw new Error pang 1
  • `scipy.ndimage.zoom` 与 `order=0` 的 `skimage.transform.rescale`

    我正在创建一个彩色灰度图像来显示图像块的分类 我需要使用零阶对低分辨率分类图像进行上采样以匹配原始图像大小 When I use skimage transform rescale I 16 order 0 I get the desire
  • Vue.js $children 按组件名称

    我正在尝试按名字访问特定的孩子 目前 由于孩子所在的位置 我这样称呼孩子 this root children 0 没关系 只要那个孩子总是 0 但如果有一种方法可以做类似的事情那就太好了 this root children detail
  • Expo 应用程序:任何导航器均未处理“TOGGLE_DRAWER”操作

    我试图从 MealsNavigator 导航中显示一个抽屉 到目前为止 我导入了 ff 必需品 import React from react import NavigationContainer from react navigation
  • 将此字符串转换为时间戳 PHP [重复]

    这个问题在这里已经有答案了 我有这个字符串 13 10 15 00 我想将其转换为时间戳 但是当我这样做时 timestamp strtotime 13 10 15 00 它返回一个空值 在你的代码中strtotime 正在尝试转换13 1
  • 从单线程进行 COM 调用会挂起线程

    我有一个应用程序 可以通过自动化插件执行一些 Excel 自动化操作 该加载项是多线程的 所有线程都设法调用 Excel COM 对象 由于 Excel 在进行多次调用时有时会返回 忙 异常 因此我将所有调用包装在 重试 函数中 但我觉得这
  • 如何从 page.open 发出的请求中查看 HTTP 状态代码?

    我有一个 phantomJS 脚本 其中包含以下内容 page open url function status if status fail handle failure 状态检查有时会起作用 但即使请求返回 500 状态仍然是 成功 如
  • 如何使用 jQuery 的 $.ajax() 函数来运行 php 脚本? [复制]

    这个问题在这里已经有答案了 为了使这一点易于理解 我制作了一个示例代码 因为我的实际代码要大得多 基本上我想要完成的是运行我的 PHP 脚本 使用 ajax 编辑 XML 文件 这是因为我需要在我的实际项目中的 javascript 中执行
  • 使用 12 GB 内存运行 Dart

    I am using 16 GB RAM on my Pc This started happening while working without any reason as far as I no This always happens
  • docker compose MySQL 容器 [2002] 连接被拒绝

    我正在尝试为 Nginx PHP Laravel MySQL 构建 docker compose 容器 但我不断收到连接被拒绝错误 docker compose yml version 3 services nginx image ngin
  • Laravel 带有约束的急切加载

    所以我的模型有两个简单的关系 然后急切加载就像这样完美地工作 Entry with author lastModifiedBy gt 但是假设我想添加一个带有约束的新关系 例如 public function foo return this