Przemek
Przemek

Reputation: 822

laravel retrieve json and save into database

I am getting cinema title + times using API from Cinelist, I then want to save these values into a database.

At the moment, it does save but only 1 record, the last one. However, I want it to save each one.

Also each time it is run I want to update existing records instead of creating new ones unless there are more results.

So usually there are 5 records, each time I run the function I want to update the database with the new 5 records, however, if it's a different day and there are 6 records I want to update 5 records and insert 1 extra one so there is 6.

My code so far:

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();
        }
}

Upvotes: 0

Views: 796

Answers (1)

plbit
plbit

Reputation: 415

You may use eloquent's updateOrCreate method to insert non-existent data and update existing data.

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
                             ]);
    }
}

Upvotes: 1

Related Questions