Php Laravel-从数据库中删除给定数组中不存在的记录
我正在获取所有用于Laravel的GitHub存储库。我做了一个命令和一个cronjob,它每分钟都在运行,运行得非常好。唯一的问题是,当从GitHub删除存储库时,它会留在我的数据库中,而不是被删除 我遇到了一个名为Php Laravel-从数据库中删除给定数组中不存在的记录,php,database,laravel,github,cron,Php,Database,Laravel,Github,Cron,我正在获取所有用于Laravel的GitHub存储库。我做了一个命令和一个cronjob,它每分钟都在运行,运行得非常好。唯一的问题是,当从GitHub删除存储库时,它会留在我的数据库中,而不是被删除 我遇到了一个名为whereNotIn()的方法,它检查数据是否符合指定的输入,您可以相应地对其执行操作。但我似乎不能让它工作 例如,下面这个表是数据库中GitHub repo和my repo的列表 GitHub Repos. | Website repos Repo 1
whereNotIn()
的方法,它检查数据是否符合指定的输入,您可以相应地对其执行操作。但我似乎不能让它工作
例如,下面这个表是数据库中GitHub repo和my repo的列表
GitHub Repos. | Website repos
Repo 1 | Repo 1
Repo 2 | Repo 2
Repo 3 | Repo 3
Repo 4 | Repo 4
| Repo 5
您可以看到,GitHub repo的列表比网站repo少了一个,这意味着在GitHub端删除了一个repo,因此在这种情况下,repo 5也需要被删除以保持最新的更改
命令中的句柄方法
public function handle() {
$repos = GitHub::connection('main')->me()->repositories();
foreach($repos as $repo) {
$name = str_replace(".", "-", $repo["name"]);
Project::whereNotIn('name', $name)->delete();
DB::table('projects')
->updateOrInsert(
['name' => $name],
[
'name' => $name,
'html_url' => $repo["html_url"],
'description' => $repo["description"],
'stargazers_count' => $repo["stargazers_count"],
'language' => $repo["language"],
]
);
}
}
您可以按以下方式执行此操作:
public function handle() {
$repos = GitHub::connection('main')->me()->repositories();
$existingReposNames = [];
foreach($repos as $repo) {
$name = str_replace(".", "-", $repo["name"]);
$existingReposNames[] = $name;
DB::table('projects')
->updateOrInsert(
['name' => $name],
[
'name' => $name,
'html_url' => $repo["html_url"],
'description' => $repo["description"],
'stargazers_count' => $repo["stargazers_count"],
'language' => $repo["language"],
]
);
}
Project::whereNotIn('name', $existingReposNames)->delete();
}