正在调用另一个 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) 中的配置更改 database至 project1
将项目 2 的 config
和 env
中的 DB_DATABASE
更改为 DB_DATABASE2
解决了问题。
这是一个缓存问题,请运行这些命令来解决你的问题:
php artisan config:clear
php artisan config:cache
php artisan cache:clear
php artisan optimize
感谢 Sergio Chamorro 提供解决方案。
我有两个 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
wherestatus
= 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) 中的配置更改 database至 project1
将项目 2 的 config
和 env
中的 DB_DATABASE
更改为 DB_DATABASE2
解决了问题。
这是一个缓存问题,请运行这些命令来解决你的问题:
php artisan config:clear
php artisan config:cache
php artisan cache:clear
php artisan optimize
感谢 Sergio Chamorro 提供解决方案。