【发布时间】:2020-10-10 03:42:21
【问题描述】:
我在 Laravel 中有一个名为 Player 的模型。此播放器数据是从外部 API 中提取的。我正在尝试从外部 API 定期更新此外部数据。外部 API 数据是players 表中应包含的内容的权威来源。
我目前有两个集合,一个是来自数据库的数据,另一个是外部API数据。我根据 API 数据在集合中构建了新的Player 模型。
我现在基本上拥有的是:
Collection $playersInDatabase; // Eloquent Collection of type Player
Collection $playersFromApi; // Collection of type Player
$playersFromApi 数据只是转换为新播放器模型并添加到集合中的 JSON API 数据。
我的问题是我不能只擦除整个players 表,因为我一次只修改表的一个子集。有没有一种有效的方法可以使用 Laravel 来比较这两者?我想将任何新的 Player 模型添加到不存在的数据库中,更新任何具有不同数据的现有 Player 模型,然后还删除 API 数据不再具有但仍在数据库中的任何记录(陈旧记录) .
我能想到的唯一方法是多次迭代集合以完成我想做的事情,我觉得有一种更简单更优雅的方法可以更好地利用框架。
参考这里是players 表的样子。我目前正在使用播种机数据:
【问题讨论】:
-
API 是否返回整个玩家群?
-
@Musa 不,它没有。这里面有派系/氏族。通过 API,您一次可以获得一个“派系”的玩家。我只存储了 6-7 个派系的玩家。从本质上讲,一个派系中的玩家一直在变化。所以我想定期更新我的派系玩家数据。所以这意味着有时新玩家加入(创建新玩家),有时他们离开(删除玩家),有时他们会做一些事情,比如改变他们的名字(更新玩家)。我可以在集合中使用
diffAssoc之类的东西,但感觉很笨拙
标签: php laravel collections eloquent laravel-collection