2017-06-13 130 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

相關問題