Вызов API другого проекта Laravel - PullRequest
0 голосов
/ 15 декабря 2018

У меня есть два проекта Laravel.У одного из них есть API

Я пытаюсь получить данные с помощью API.

public function getSyncOrders() {
    $orders = Invoice::where('status', 0)->get();
    return response()->json([
        'data' => [
            'orders'                => $orders
        ]
    ], 200);      
}

Я пытаюсь получить данные в другом проекте laravel.

public function syncOrders() {
    if(auth()->check()){
        Order::truncate();

        $curl = curl_init();

        curl_setopt_array($curl, array(
            CURLOPT_URL => "http://project1.net/api/sync-orders",
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 600,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "GET"
        ));

        $response = curl_exec($curl);
        $err = curl_error($curl);

        curl_close($curl);

        if ($err) {
            //echo "cURL Error #:" . $err;
        } else {
            echo $response;
        }
    }
    else{
        return redirect('/');
    }
}

Но я получаю ошибку:

SQLSTATE [42S02]: Базовая таблица или представление не найдены: 1146 Таблица 'project2.invoice' не существует (SQL: выберите * из invoice, гдеstatus = 0)

В проекте 1 есть таблица invoice в базе данных, а в проекте 2 - таблица orders в базе данных.

Если я использую URL http://project1.net/api/sync-orders вбраузер, он возвращает данные.

Мне нужна помощь, чтобы исправить запрос curl, чтобы проект 2 не выполнял код и выполнял поиск в своей собственной базе данных, а вместо этого получал данные из API.

Ответы [ 3 ]

0 голосов
/ 15 декабря 2018

Кажется, что в этом URL (http://project1.net/api/sync-orders), модель Invoice подключена к базе данных 'project2'.

Так что в вашем файле .env или ваша конфигурация в (config/database.php) изменить база данных на project1

0 голосов
/ 16 декабря 2018

Изменение DB_DATABASE в config и env на DB_DATABASE2 для проекта 2 решило проблему.

0 голосов
/ 15 декабря 2018

Это так странно, что вы видите эту ошибку.Если вы настаиваете на выполнении работы только с помощью curl, возможно, было бы лучше, если бы вы предоставили более подробную информацию.

Но я рекомендую начать использовать Guzzle

composer require guzzlehttp/guzzle:~6.0

тогда ваш код станет таким:

public function syncOrders() {
    if(auth()->check()){
        $client = new \GuzzleHttp\Client(['base_uri' => 'http://project1.net/api/']);
        $response = $client->get('sync-orders')->send();
        dd($response->getBody(), $response); // you can do whatever you want with $response
    }

    return redirect('/');

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...