laravel检索json并保存到数据库中

laravel检索json并保存到数据库中,laravel,laravel-5,Laravel,Laravel 5,我正在使用电影列表中的API获取电影标题+时间,然后我想将这些值保存到数据库中 目前,它确实保存了一条记录,但只保存了最后一条记录。然而,我希望它能拯救每一个人 此外,每次运行时,我都希望更新现有记录,而不是创建新记录,除非有更多结果 所以通常有5条记录,每次我运行函数时,我想用新的5条记录更新数据库,但是,如果是不同的一天,有6条记录,我想更新5条记录,并插入1条额外的记录,这样就有6条 到目前为止,我的代码是: function odeon(){ $data= file_ge

我正在使用电影列表中的API获取电影标题+时间,然后我想将这些值保存到数据库中

目前,它确实保存了一条记录,但只保存了最后一条记录。然而,我希望它能拯救每一个人

此外,每次运行时,我都希望更新现有记录,而不是创建新记录,除非有更多结果

所以通常有5条记录,每次我运行函数时,我想用新的5条记录更新数据库,但是,如果是不同的一天,有6条记录,我想更新5条记录,并插入1条额外的记录,这样就有6条

到目前为止,我的代码是:

function odeon(){
        $data= file_get_contents('https://api.cinelist.co.uk/get/times/cinema/10565');
        $data = json_decode($data);

        foreach($data->listings as $listing){
            $title = $listing->title;
            $time = implode(', ', $listing->times);
            $id = + 1;

            $films = Film::where('id', $id)->first();
            if (!$films) {
                $films = new Film();
            }

            $films->title = $title;
            $films->times = $time;
            $films->save();
        }
}

您可以使用eloquent的updateOrCreate方法插入不存在的数据并更新现有数据

function odeon(){
    $data= file_get_contents('https://api.cinelist.co.uk/get/times/cinema/10565');
    $data = json_decode($data);

    foreach($data->listings as $listing){
        $title = $listing->title;
        $time = implode(', ', $listing->times);

       Films::updateOrCreate([
                             'title' => $title,
                             '$times' => $time
                             ]);
    }
}

您创建的每个新胶片对象的id都会重置,因为它位于foreach范围内。所以每次id都是
1
,您将不断更新此对象。那么解决方案是什么呢?我得到:MassaSignmentException标题在您的模型中,您必须添加受保护的$fillable=['title','times'];请看这里的大规模作业的细节,这是一个伟大的作品,这是一个电影院,但如果我想添加另一个电影院呢?我不希望两者之间发生冲突。你必须添加一个专栏来确定这部电影属于哪家电影院。在这种情况下,即使标题和时间相同,条目也将具有不同的电影院ID,从而避免冲突。