前提・実現したいこと
ReactとLaravelを使った簡単なアプリケーションを作成しています。
具体的には、LaravelでAPIを作成し、ReactのaxiosでAPIを叩いて取得内容を画面に表示するというものです。
APIはMySQLからEloquntを使用してデータを全件取得し、そのデータを返します。
しかし、axiosでAPIにアクセスすると500エラーが返ってきます。
色々試しましたが一向に解決しません。
開発環境の構築にはDockerを使用しています。
どなたか解決方法のご教授お願い致します。
発生している問題・エラーメッセージ
Illuminate\Database\QueryException: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known (SQL: select * from `posts`) in file /Users/kondohiroki/php/to/summer_work/vendor/laravel/framework/src/Illuminate/Database/Connection.php on line 664 Caused by PDOException: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known in file /Users/kondohiroki/php/to/summer_work/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php on line 70 Caused by PDOException: PDO::__construct(): php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known in file /Users/kondohiroki/php/to/summer_work/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php on line 70 Stack trace:
該当のソースコード
Docker
1version: '3' 2services: 3 nginx: 4 container_name: nginx 5 build: 6 context: ./docker/nginx 7 dockerfile: Dockerfile 8 ports: 9 - 8080:80 10 volumes: 11 - ./docker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf 12 - ./to:/var/www/html 13 depends_on: 14 - php 15 16 php: 17 container_name: php 18 build: 19 context: ./docker/php 20 dockerfile: Dockerfile 21 volumes: 22 - ./to:/var/www/html 23 depends_on: 24 - db 25 26 db: 27 container_name: mysql 28 build: 29 context: ./docker/mysql 30 dockerfile: Dockerfile 31 ports: 32 - 3306:3306 33 volumes: 34 - ./docker/mysql/data:/var/lib/mysql 35 - ./docker/mysql/:/etc/mysql/conf.d/ 36 command: 37 - --default-authentication-plugin=mysql_native_password 38 environment: 39 MYSQL_ROOT_PASSWORD: secret
Laravel
1/** 2 * .env 3 */ 4APP_NAME=Laravel 5APP_ENV=local 6APP_KEY=base64:cLlHR9HwX3wd/YIaNy408bZEEOmWCFFlhteOhQMgRLA= 7APP_DEBUG=true 8APP_URL=http://localhost 9 10LOG_CHANNEL=stack 11 12DB_CONNECTION=mysql 13DB_HOST=db 14DB_PORT=3306 15DB_DATABASE=summer_work 16DB_USERNAME=root 17DB_PASSWORD=secret 18 19BROADCAST_DRIVER=log 20CACHE_DRIVER=file 21QUEUE_CONNECTION=sync 22SESSION_DRIVER=file 23SESSION_LIFETIME=120 24 25REDIS_HOST=127.0.0.1 26REDIS_PASSWORD=null 27REDIS_PORT=6379 28 29MAIL_DRIVER=smtp 30MAIL_HOST=smtp.mailtrap.io 31MAIL_PORT=2525 32MAIL_USERNAME=null 33MAIL_PASSWORD=null 34MAIL_ENCRYPTION=null 35 36AWS_ACCESS_KEY_ID= 37AWS_SECRET_ACCESS_KEY= 38AWS_DEFAULT_REGION=us-east-1 39AWS_BUCKET= 40 41PUSHER_APP_ID= 42PUSHER_APP_KEY= 43PUSHER_APP_SECRET= 44PUSHER_APP_CLUSTER=mt1 45 46MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" 47MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" 48 49 50 51/** 52 * routes/api.php 53 */ 54Route::group(['middleware' => 'api'], function () { 55 Route::get('v1/posts', 'PostController@getPost'); 56}); 57 58 59 60/** 61 * app/Http/Controllers/PostController.php 62 */ 63<?php 64 65namespace App\Http\Controllers; 66 67use App\Post; 68 69class PostController extends Controller 70{ 71 // getPost 72 public function getPost() 73 { 74 $posts = Post::all(); 75 76 return $posts; 77 } 78} 79 80 81 82/** 83 * app/Post.php 84 */ 85<?php 86 87namespace App; 88 89use Illuminate\Database\Eloquent\Model; 90 91class Post extends Model 92{ 93}
React
1export const getPosts = () => { 2 return (dispatch) => { 3 dispatch(getPostsRequest()) 4 return axios.get(`api/v1/posts`) 5 .then(res => 6 dispatch(getPostsSuccess(res.data)) 7 ).catch(err => 8 dispatch(getPostsFailure(err)) 9 ) 10 } 11}
試したこと
マイグレーションやTinkerを使用したDB操作はできます。
PostContoroller.phpをDB操作ではなく単純な連想配列を返すように変更しても機能しました。
Eloquentを使用してDB操作をした場合だけ500エラーが出ます。
補足情報(FW/ツールのバージョンなど)
Laravel 5.8.33

回答1件