Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Laravel:为什么急切加载只保留最后一个模型的结果?

Laravel:为什么急切加载只保留最后一个模型的结果?
EN

Stack Overflow用户
提问于 2018-09-27 18:22:19
回答 2查看 470关注 0票数 0

如果我执行以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
App\Assignment::with(['unit.records' => function ($q) {
                    $q->where('process_date', '>=', '2016-01-01')
                        ->where('process_date', '<=', '2018-09-27')
                        ->orderBy('process_date')
                        ->orderBy('process_hour')
                        ->limit(1);
                    }])
                    ->whereIn('id', [9])
                    ->get();

然后我得到以下结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Illuminate\Database\Eloquent\Collection {#1104
 all: [
   App\Assignment {#1112
     id: 9,
     unit_id: 6,
     start_date: "2015-11-25",
     end_date: "2016-01-04",
     unit: App\Unit {#986
       id: 6,
       records: Illuminate\Database\Eloquent\Collection {#945
         all: [
           App\Record {#853
             id: 6624,
             unit_id: 6,
             process_date: "2017-09-19",
             process_hour: 14,
           },
         ],
       },
     },
   },
 ],
}

请注意,加载的单元具有与查询匹配的记录。

现在,如果我使用完全相同的查询,但将另一个赋值(49)添加到我的whereIn数组:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
App\Assignment::with(['unit.records' => function ($q) {
                    $q->where('process_date', '>=', '2016-01-01')
                        ->where('process_date', '<=', '2018-09-27')
                        ->orderBy('process_date')
                        ->orderBy('process_hour')
                        ->limit(1);
                    }])
                    ->whereIn('id', [9,49])
                    ->get();

显示了分配49的记录,但分配9的记录不再显示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Illuminate\Database\Eloquent\Collection {#1032
 all: [
   App\Assignment {#1014
     id: 9,
     unit_id: 6,
     start_date: "2015-11-25",
     end_date: "2016-01-04",
     unit: App\Unit {#1283
       id: 6,
       records: Illuminate\Database\Eloquent\Collection {#1254
         all: [],
       },
     },
   },
   App\Assignment {#1061
     id: 49,
     unit_id: 29,
     start_date: "2017-02-24",
     end_date: "9999-12-31",
     unit: App\Unit {#1279
       id: 29,
       records: Illuminate\Database\Eloquent\Collection {#1131
         all: [
           App\Record {#1284
             id: 6062,
             unit_id: 29,
             process_date: "2017-03-10",
             process_hour: 13,
           },
         ],
       },
     },
   },
 ],
}

与分配9的条件匹配的记录显然是存在的,但是由于某种原因,当查询发现多个分配具有与条件匹配的单位/记录时,它不会被加载。

我还用更多的赋值对其进行了测试,在每种情况下,记录只会在数组中的最后一个赋值时显示。

这是怎么回事?

EN

回答 2

Stack Overflow用户

发布于 2018-09-27 18:57:09

问题是你使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
->limit(1)

这会将关系记录的数量限制为1。只需删除此行就可以了。

票数 3
EN

Stack Overflow用户

发布于 2018-11-01 23:35:39

在Laravel中没有对有限制的急切加载的原生支持。

我为它创建了一个包:https://github.com/staudenmeir/eloquent-eager-limit

在父模型和相关模型中使用HasEagerLimit特征。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Unit extends Model {
    use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
}

class Record extends Model {
    use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
}

然后你可以将->limit(1)应用到你的关系中,你就会得到预期的结果。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52543029

复制
相关文章
如何使用Duplicut对大型字典进行重复项剔除
现代密码字典在创建过程中通常会连接多个数据源,在理想情况下,最有可能成功的密码一般都位于字典列表的开头部分,这样才能够确保密码在最短的时间里被破解成功。
FB客服
2021/07/02
1.2K0
[Leetcode][python]删除排序数组中的重复项/删除排序数组中的重复项 II
数组完成排序后,我们可以放置两个指针 ii 和 jj,其中 ii 是慢指针,而 jj 是快指针。只要 nums[i] = nums[j]nums[i]=nums[j],我们就增加 jj 以跳过重复项。
蛮三刀酱
2019/03/26
6.5K0
php 去除数组重复项并且重新建立索引 转
$data = array(0=>'jquery',1=>'php',2=>'ajax',3=>'jquery',4=>'linux',5=>'php');  $data = array_values(array_unique($data));  print_r($data);
双面人
2019/04/10
1.3K0
JS判断重复数组是否有重复项
大家好,今天我们来讲一下,如何使用javascript判断一个数组之中,是否有相同重复的元素。 在讲之前,先来讲一下思路: 在现实当中,当我们要判断某几个东西是否相同,那就意味着这东西至少是有2个或
web前端教室
2018/02/06
7.4K0
JS判断重复数组是否有重复项
删除排序数组中的重复项
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
木瓜煲鸡脚
2020/09/23
5K0
<leetcode刷题-数组>删除排序数组中的重复项
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。
哆哆jarvis
2022/08/23
4.4K0
[LEETCODE]从排序数组中删除重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
用户2353021
2020/05/11
6.3K0
删除排序数组中的重复项
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
_kyle
2020/11/03
4.5K0
删除有序数组中的重复项
要求删除重复元素,实际上就是将不重复的元素移到数组的左侧,即慢指针p的右边都是不重复的元素,p—q之间是出现重复的元素。
大忽悠爱学习
2021/03/27
4.7K0
删除有序数组中的重复项
给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。
狼啸风云
2023/10/07
2140
删除有序数组中的重复项 II
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。
狼啸风云
2023/10/07
2040
LeetCode | 删除有序数组中的重复项
题目 删除有序数组中的重复项 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。 由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。 将最终结果插入 nums 的前 k 个位置后返回 k 。 不要使用额外的空间,你必须在 原地修改输入数组 并在使用 O(1) 额外空间的条件下完成。 判题标准: 系统会用下面的代码来测试你的题解:
yiyun
2023/03/08
3.9K0
LeetCode | 删除有序数组中的重复项
[leetcode数组系列]3 删除排序数组中的重复项
1 leetcode原文链接 https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/ 示例1
我是程序员小贱
2020/06/05
4.2K0
Access重复项查询
大家好上节介绍了汇总查询,继续介绍选择查询中的重复项查询和不匹配项查询,这两种查询都可以在查询向导中创建,本节主要介绍重复项查询。
无言之月
2020/06/02
1.8K0
Access重复项查询
LeetCode - 删除排序数组中的重复项
LeetCode第26题,难度简单。这题题目也是相当的长,所以只取了题目的主干,示例和说明请点击下方链接查看详情。
晓痴
2019/08/22
4.1K0
LeetCode - 删除排序数组中的重复项
python 使用pandas 去除csv重复项
subset : column label or sequence of labels, optional 用来指定特定的列,默认所有列 keep : {‘first’, ‘last’, False}, default ‘first’ 删除重复项并保留第一次出现的项 inplace : boolean, default False 是直接在原来数据上修改还是保留一个副本
kirin
2021/04/19
5.5K0
python 使用pandas 去除csv重复项
26. 删除排序数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
张伦聪zhangluncong
2022/10/26
2.4K0
26. 删除有序数组中的重复项
一 题目: 二 思路: 比对法,每次找到一个和咱们要设置位置不一样的值 记录当前正在设置值(需要被比较的值)的位置,只要后面的元素和他一样那就跳过 直到找到下一个和它不一样的数字放在下一个位置,然后继续比对 三:代码: class Solution { public int removeDuplicates(int[] nums) { int len = nums.length; if (len <=1){ return len;
名字是乱打的
2022/05/13
3.5K0
26. 删除有序数组中的重复项
Swift 从排序数组中删除重复项 - LeetCode
给定一个有序数组,你需要原地删除其中的重复内容,使每个元素只出现一次,并返回新的长度。
韦弦zhy
2018/09/11
5.2K0
LeetCode 26:删除有序数组中的重复项
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
五分钟学算法
2023/01/10
3.3K0
LeetCode 26:删除有序数组中的重复项

相似问题

将ids ->项转换为{id} ->项

11

将列表中的重复项转换为唯一项

33

将文件转换为包含重复项的字典

20

将数组中的重复项转换为唯一项,而不删除Javascript中的任何项

12

获取重复项的和作为IDS的数组

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文