aletede91
aletede91

Reputation: 1166

Update Laravel model from external API

I have a Coin model with id,name,price.

In a function, I extract all the coins and create a comma separated string with all the ids:

$coins = Coin::all();
$coinsIds = $coins->pluck('id')->toArray();
$coinsIdsString = implode(',', $coinsIds);

After that I make a call to an external API:

$url = 'https://myapi.com?ids' . $coinsIdsString;
$response = Http::get($url)->json();

$response value is an array of coins, something like:

[
   {
      "id":"1",
      "name":"A",
      "price":"1.2",
   },
   ...
]

What would be the best way to update and save my Coin model with the price value from API?

Upvotes: 0

Views: 399

Answers (1)

Jason
Jason

Reputation: 3040

Unfortunately, you're not going to be able to do anything other than update a single record at a time. That is, loop through the results of the array and perform a database update on each record. My recommendation is

$results = ... // Result of API call;

foreach ($results as $result) {
   DB::table('coins')
      ->where('id', $result['id'])
      ->update(['price' => $result['price']]);
}

I would then create a scheduled command to periodically perform the update since it is likely to be resource intensive depending on the volume of calls.

https://laravel.com/docs/8.x/scheduling#scheduling-artisan-commands

Upvotes: 1

Related Questions