Недопустимое смещение строки 'Title' при сохранении данных API в db laravel - PullRequest
0 голосов
/ 15 февраля 2020

Я пытаюсь сохранить данные из API в моей базе данных, у меня есть функция для извлечения

public function index()
    {
        $client = new Client();
        $uri = 'http://www.omdbapi.com/?t=tree&apikey=';
        $header = ['headers' => ['X-Auth-Token' => 'My-Token']];
        $res = $client->get($uri, $header);
        $data = json_decode($res->getBody()->getContents(), true);
  return $data;
    }

, а затем функция для сохранения в моей БД

    public function store(Request $request)
    {
        $movies = $this->index();
//        dd($this->index());

        collect($movies);
//        dd($movies);

             foreach($movies as $movie) {
//                dd($movie);
                Movie::create([
                    'title' => $movie['Title'],
                     'year' =>$movie['Year'],
                    'type' =>$movie['Type'],
                    'cover_photo' => $movie['Poster'],
                ]);

            }

    }

При попытке сохранить я получаю ошибку выше

1 Ответ

0 голосов
/ 16 февраля 2020

Ваш метод index() возвращает массив свойств только для одного mov ie, а не списка фильмов, поэтому ваш метод store() будет работать, если вы измените его для хранения одного mov ie вместо этого:

public function store(Request $request)
{
    $movies = $this->index();

    Movie::create([
        'title' => $movie['Title'],
        'director' => $movie['Director'],
        'release_date' => $movie['Released'],
        'plot' => $movie['Plot'],
        'actors' => $movie['Actors'],
        'runtime' => $movie['Runtime'],
        'genre' => $movie['Genre'],
        'production' => $movie['Production'],
        'writer' => $movie['Writer'],
        'cover_image' => $movie['Poster'],
        'language' => $movie['Language'],
        'rated' => $movie['Rated']
    ]);

    return response('success!')
}

Согласно документации используемого API, изменение t=tree на s=tree будет работать для получения списка вместо одного экземпляра:

public function index()
{
    $client = new Client();
    $uri = 'http://www.omdbapi.com/?s=tree&apikey=';
    $header = ['headers' => ['X-Auth-Token' => 'My-Token']];
    $res = $client->get($uri, $header);
    $data = json_decode($res->getBody()->getContents(), true);

    return $data;
}
...