调用另一个laravel项目的API

时间:2018-12-15 12:08:38

标签: php laravel api laravel-5.1

我有两个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获取数据。

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

}

答案 2 :(得分:0)

在此网址(http://project1.net/api/sync-orders)中,发票模型似乎已连接到“ project2”数据库。

因此,在您的.env文件中,将(config / database.php)中的配置更改数据库project1

答案 3 :(得分:0)

这是一个缓存问题,请运行以下命令以解决您的问题:

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

感谢Sergio Chamorro提供解决方案。