正在调用另一个 laravel 项目的 API

Calling API of another laravel project

我有两个 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]: Base table or view not found: 1146 Table 'project2.invoice' doesn't exist (SQL: select * from invoice where status = 0)

项目 1 在数据库中有 table invoice,而项目 2 在数据库中有 table orders

如果我在浏览器中使用 url http://project1.net/api/sync-orders,它是 returns 数据。

我需要帮助来修复 curl 请求,以便项目 2 不执行代码并在其自己的数据库中搜索,而是从 API.[=20= 获取数据]

你看到那个错误真是太奇怪了。如果您坚持只使用 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('/');

}

在这个 url (http://project1.net/api/sync-orders) 中,发票模型似乎连接到 'project2' 数据库。

因此,在您的 .env 文件中 您在 (config/database.php) 中的配置更改 databaseproject1

将项目 2 的 configenv 中的 DB_DATABASE 更改为 DB_DATABASE2 解决了问题。

这是一个缓存问题,请运行这些命令来解决你的问题:

php artisan config:clear
php artisan config:cache
php artisan cache:clear
php artisan optimize

感谢 Sergio Chamorro 提供解决方案。