2017-06-13 125 views
0

我使用Cinelist中的API获取电影标题+时间,然后我想将这些值保存到数据库中。laravel检索json并保存到数据库中

目前,它确实保存,但只有1条记录,最后一条。不过,我希望它能保存每一个。

另外,每次运行时,我想更新现有记录,而不是创建新记录,除非有更多结果。

所以通常有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(); 
     } 
} 
+0

您的ID因您创建的每个新电影对象而重置,因为它位于您的foreach范围内。所以id每次都会是'1',你会不断更新这个对象。 – Jerodev

+0

那么解决方案是什么? – Przemek

回答

1

你可以用雄辩的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 
          ]); 
    } 
} 
+0

我得到:MassAssignmentException 标题 – Przemek

+0

在你的模型中,你必须添加受保护的$ fillable = ['title','times']; – plbit

+0

https://laravel.com/docs/5.4/eloquent#mass-assignment 请看这里的大量作业的细节 – plbit

相关问题