Tengo un modelo Coin con id,name,price.

En una función, extraigo todas las monedas y creo una cadena separada por comas con todos los identificadores:

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

Después de eso, hago una llamada a una API externa:

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

El valor $response es una matriz de monedas, algo como:

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

¿Cuál sería la mejor manera de actualizar y guardar mi modelo de monedas con el valor price de la API?

0
aletede91 13 mar. 2021 a las 02:49

1 respuesta

La mejor respuesta

Desafortunadamente, no podrá hacer nada más que actualizar un solo registro a la vez. Es decir, recorra los resultados de la matriz y realice una actualización de la base de datos en cada registro. Mi recomendación es

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

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

Luego, crearía un comando programado para realizar periódicamente la actualización, ya que es probable que consuma muchos recursos según el volumen de llamadas.

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

1
Jason 13 mar. 2021 a las 01:20