gpt4 book ai didi

mysql - 在 Laravel eloquent 中执行 "findManyOrCreate"所需资源最少的是什么?

转载 作者:行者123 更新时间:2023-11-29 15:50:25 26 4
gpt4 key购买 nike

我有一组来自输入的邮政编码:

$postCodes = collect(["BK13TV", "BK14TV", "BK15TV", "BK16TV"]);

在我的数据库中,我已经有两个邮政编码 - “BK13TV”、“BK16TV”。

所以我想运行这样的东西:

$postCodeModels = PostCode::findManyOrCreate($postCodes->map($postCode) {
return ['code' => $postCode]
})

我最初的方法是加载所有邮政编码,然后将它们与输入中的邮政编码进行比较,如下所示:

PostCode::createMany($postCodes->diff(PostCode::all()->pluck('code')))

但是,这里意味着我正在加载 post_codes 表的全部内容,这似乎是错误的。

在理想情况下,这将返回与传递的邮政编码相匹配的所有邮政编码模型,并为数据库中不存在的邮政编码创建条目。

最佳答案

首先我需要检索现有的邮政编码:

$existingPostCodes = PostCode::whereIn('code', $postCodes)->get();

查找输入中尚未存储在数据库中的所有邮政编码:

$newPostCodes = $postCodes->diff($existingPostCode->pluck('code'));

最终检索所有新的邮政编码作为模型:

$postCodeModels = PostCode::whereIn('code', $postCodes)->get();

诚然,这仍然需要三个查询,但确实消除了加载整个表数据的疯狂操作。

关于mysql - 在 Laravel eloquent 中执行 "findManyOrCreate"所需资源最少的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56791487/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com