我有两个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获取数据。
答案 0 :(得分:2)
将项目2的DB_DATABASE
中的config
和env
更改为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提供解决方案。