【发布时间】:2021-01-29 06:32:13
【问题描述】:
我使用 Laravel v5.8 创建了一个 API。 这个 API 有一个端点,它接收一些参数并在数据库表上创建 1 行。 当我使用 Postman 调用此端点时,它可以工作。
但是…… 我使用 Laravel 5.8 创建了一个应用程序,当此应用程序尝试调用发送相同参数和标头的 API 端点时,会显示此错误:
“Illuminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table (truncated...”
该表应该是“api_log”,但我在错误消息中看不到这个名称。
注意:此错误仅在本地环境中发生。
Laravel 应用正在使用 GuzzleHttp 调用 API。
APP 请求:
$client = new \GuzzleHttp\Client();
$res = $client->request('POST', 'http://project.local/v1/api_log', [
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded',
'Authorization' => $_ENV['API_TOKEN']
],
'form_params' => [
'json' => $json_request
]
]);
API 控制器中的 MySQL 语句(未使用模型):
$sql = "INSERT INTO api_log (user_id, environment, start_datetime, end_datetime, requested_api, processing_time, activity_id, ip_address, request_data, response_data, credits) VALUES (".$user_id.",'".$env."','".$start_datetime."','".$end_datetime."',".$requested_api.",".$processing_time.",'".$activity_id."','".$ip_address."','".$request_data."','".$response_data."',".$credits.")";
$insert_log = DB::connection('mysql_log')->statement($sql);
我已经尝试过使用这样的模型,但没有成功:
class ApiLog extends Model
{
protected $connection = 'mysql_log';
protected $table = 'api_log';
}
我正在为 API 和 APP 使用普通的 http://localhost/... 域。 我尝试将 API 包装到像 http://project.local 这样的虚拟主机中,但显示了相同的错误。
有什么线索吗?谢谢。
【问题讨论】: