Laravel 急切加载有限制

2023-11-27

我有两个表,即“users”和“users_actions”,其中“users_actions”与用户有 hasMany 关系:

users

id | name | surname | email...

actions

id | id_action | id_user | log | created_at

模型用户.php

class Users {
    public function action()
    { 
       return $this->hasMany('Action', 'user_id')->orderBy('created_at', 'desc');
    }
}

现在,我想检索一个list of all users with 他们最后的行动.

我看到这样做Users::with('action')->get();只需获取关系的第一个结果,就可以轻松地给出最后一个操作:

foreach ($users as $user) {
   echo $user->action[0]->description;
}

但我当然想避免这种情况,只为每个用户选择最后一个操作。

我尝试使用约束,例如

Users::with(['action' => function ($query) {
    $query->orderBy('created_at', 'desc')
          ->limit(1);
    }])
->get();

但这给了我一个不正确的结果,因为 Laravel 执行了这个查询:

SELECT * FROM users_actions WHERE user_id IN (1,2,3,4,5)
ORDER BY created_at
LIMIT 1

这当然是错误的。是否有可能在不使用 Eloquent 对每条记录执行查询的情况下获得此结果? 我是否犯了一些我没有看到的明显错误?我对使用 Eloquent 还很陌生,有时关系会困扰我。

Edit:

出于代表性目的的一部分,我还需要此功能在关系内部搜索,例如我想搜索 LAST ACTION = 'something' 的用户

我尝试使用

$actions->whereHas('action', function($query) {
    $query->where('id_action', 1);
});

但这给了我所有具有操作 = 1 的用户,并且由于它是日志,因此每个人都通过了该步骤。


Edit 2:

感谢@berkayk,看起来我解决了问题的第一部分,但我仍然无法在关系内搜索。

Actions::whereHas('latestAction', function($query) {
    $query->where('id_action', 1);
});

仍然没有执行正确的查询,它会生成类似以下内容的内容:

select * from `users` where 
 (select count(*) 
   from `users_action` 
   where `users_action`.`user_id` = `users`.`id` 
   and `id_action` in ('1')
  ) >= 1 
order by `created_at` desc

我需要获取记录latest行动是1


我认为您所要求的解决方案已在此处进行了解释http://softonsofa.com/tweaking-eloquent-relations-how-to-get-latest-lated-model/

在用户模型中定义这种关系,

public function latestAction()
{
  return $this->hasOne('Action')->latest();
}

并得到结果

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

Laravel 急切加载有限制 的相关文章

随机推荐

  • “@+android:id/title”是什么意思?

    正常情况下 我们应该使用 id 定义一个 id 并使用 id引用一个 id 今天我发现 android id title in apps settings res layout preferenc progress xml 如何理解它以及如
  • 比较相等的日期时间返回 false

    我有一个关于如何在 C 中比较 存储日期时间的查询 考虑以下代码 var createdDate DateTime Now using cr new LanguageDictionaryRepository ds cr Add new Sy
  • 在 Rcpp 中构造 3D 数组

    我正在尝试使用提供的维度列表将 1D 数组映射到 3D 数组 这是我的组件 SEXP data my 1D array I can initialise new 3D vector in the following way NumericV
  • Angular ngx-mat-select-search 自定义组件

    我正在尝试使用 ngx mat select search 组件在我的应用程序中放置一个带有搜索栏的 mat select 样式下拉菜单 https www npmjs com package ngx mat select search 我
  • 如何在 Liferay portlet 中设置 Cookie?

    我在尝试设置会话 cookie 时遇到问题Liferay 6 0 portlet 我希望能够向客户端浏览器设置一个 cookie 以存储用于 linkedin 身份验证的应用程序密钥 然后其他 portlet 可以在其中检索它 我可以使用以
  • 如何在 ReadTheDocs 导航栏中链接生成的索引页面?

    我正在 ReadTheDocs 上使用 Sphinx 主题创建我的文档 构建过程会生成一个 genindex html 文件 可以通过以下方式引用该文件 Link to the ref genindex page 这会创建 链接到Index
  • 了解 Dagger 2 中的范围

    我在 Dagger 2 中遇到了与范围相关的错误 我正在尝试了解如何解决它 我有一个CompaniesActivity这表明公司 当用户选择一个项目时 所选公司的员工会显示在EmployeesActivity 当用户选择一名员工时 她的详细
  • 如何在 yii2 模态窗口中使用 pjax 更新小部件

    我的模态窗口中有两个 ActiveForm 提交第一个表单后 我需要更新第二个表单并保持模态 据我了解 pjax 可以处理这个问题 但无法让它正常工作 在 form php 中 我有 ActiveForm 和应该更新的小部件 need to
  • 使用 PdfMiner 和 PyPDF2 合并列提取文本

    我正在尝试使用 pdfMiner 解析 pdf 文件文本 但提取的文本被合并 我正在使用以下链接中的 pdf 文件 编辑 链接已损坏 指向潜在的恶意软件 我擅长任何类型的输出 文件 字符串 这是为我返回提取的文本作为字符串的代码 但由于某种
  • 合并两个 jQuery 对象

    我喜欢有一个或多个 jQuery 对象的返回值 以将它们添加到 var f function var a div class a div do someting awesome return a 带有两个 s 的正确示例 var f fun
  • Rails:有没有办法告诉请求的来源?

    谷歌分析告诉我流量的来源是什么 搜索引擎 Facebook 等 有没有办法从每个请求获取此信息request对象或其他 我将不胜感激任何帮助 request referrer会给你HTTP 引荐来源网址 value
  • Azure Web应用程序:堆栈设置

    I can set my stack for a webapp through the portal 我通过 ARM 模板部署基础设施 apiVersion 2015 08 01 type Microsoft Web sites name
  • 如何清除表单中所有文本框的文本?

    private void CleanForm foreach var c in this Controls if c is TextBox TextBox c Text String Empty 上面这个方法不起作用 控件没有被清除 它编译
  • .Net WebDAV 服务器

    我正在寻找在 ASP Net 中实现 WebDAV 服务器 该应用程序将部署到 IIS 6 我见过一些提供此功能的框架 但我似乎无法确定它们如何在不 显然 修改 IIS 设置的情况下完成此功能 我的具体问题是如何配置 IIS 和 ASP N
  • 设置土耳其语文本转语音[重复]

    这个问题在这里已经有答案了 我正在开发文本到语音应用程序 我想将土耳其语设置为这样 tts setLanguage Locale TR 但这在android中不可用 这种添加方式是错误的还是有不同的方法将土耳其语添加到文本到语音中 任何帮助
  • 如何在多项目 Android 构建中排除重复的 C 共享库 (.so)?

    当使用两个库模块构建父项目时 我遇到 重复文件 冲突 这两个模块使用相同的库模块libc shared so共享库 NOTE 请不要认为这是一个 重复的问题 我读过几篇相关的文章 它们帮助我走到了这一步 但是 没有帖子提供适用于我的案例的答
  • 多处理写入 pandas 数据框

    所以我试图用下面的代码做的是读取列表列表并将它们放入名为的函数中checker然后有log result处理函数的结果checker 我尝试使用多线程来执行此操作 因为变量名称rows to parse实际上有数百万行 因此使用多个内核应该
  • 为自定义类实现 hashcode 和 equals

    所以我有许多自定义类 其中也有使用组合的自定义类 我的自定义类具有经常更改的变量 我将它们添加到 HashSets 中 所以我的问题是当我实现 hashCode 时 对于只有不断变化的私有字段的类 我该怎么办 以下是一个自定义类的示例 pu
  • Html Agility Pack - 删除元素,但不删除innerHtml

    我可以通过 note Remove 轻松删除该元素 如下所示 HtmlDocument html new HtmlDocument html Load Server MapPath Site themes default index csh
  • Laravel 急切加载有限制

    我有两个表 即 users 和 users actions 其中 users actions 与用户有 hasMany 关系 users id name surname email actions id id action id user