[英]Illuminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found
[英]Illuminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table  (truncated
我使用 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這樣的虛擬主機中,但顯示了相同的錯誤。
有什么線索嗎? 謝謝。
嗯......經過很多小時后,我通過查看 Laravel 日志文件解決了這個問題。
問題出在 .env 文件中。
.env 文件有以下幾行:
ALTER_CONNECTION=mysql_log
ALTER_HOST=127.0.0.1
ALTER_PORT=3306
ALTER_DATABASE=my_db
ALTER_USERNAME=root
ALTER_PASSWORD=my_pass
我已經改變了它:
ALT_CONNECTION=mysql_log
ALT_HOST=127.0.0.1
ALT_PORT=3306
ALT_DATABASE=my_db
ALT_USERNAME=root
ALT_PASSWORD=my_pass
我認為這些變量名稱被捕獲(我不知道為什么)所以數據庫配置失敗了。
謝謝你們。
很遺憾我無法發表評論。 但似乎您尚未在數據庫配置文件中指定連接mysql_log
。 為了使用$connection
或DB::connection()
你必須在config/database.php
指定連接
如果您這樣做了,請檢查您的值是否正確放入文件中。 為數據庫/用戶名/密碼使用與您通過應用程序運行的其他連接不同的constant
是明智的。
'connections' => [
// New connection
'mysql_log' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('MYSQL_LOG_HOST', '127.0.0.1'),
'port' => env('MYSQL_LOG_PORT', '3306'),
'database' => env('MYSQL_LOG_DATABASE', 'DB2'),
'username' => env('MYSQL_LOG_USERNAME', 'DB2'),
'password' => env('MYSQL_LOG_PASSWORD', 'PASS'),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
// Typical primary connection
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
]
將連接添加到配置后,您可以運行php artisan config:cache
以確保正確緩存新配置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.