Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel-从数据库中删除给定数组中不存在的记录_Php_Database_Laravel_Github_Cron - Fatal编程技术网

Php Laravel-从数据库中删除给定数组中不存在的记录

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

我正在获取所有用于Laravel的GitHub存储库。我做了一个命令和一个cronjob,它每分钟都在运行,运行得非常好。唯一的问题是,当从GitHub删除存储库时,它会留在我的数据库中,而不是被删除

我遇到了一个名为
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();
}