質問編集履歴

2 不要な<code>の消去

khkhkh

khkhkh score 20

2019/08/28 16:09  投稿

ReactでLaravelのAPIを叩けない。
```ここに言語を入力
コード
```### 前提・実現したいこと
### 前提・実現したいこと
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
version: '3'
services:
 nginx:
   container_name: nginx
   build:
     context: ./docker/nginx
     dockerfile: Dockerfile
   ports:
     - 8080:80
   volumes:
     - ./docker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
     - ./to:/var/www/html
   depends_on:
     - php
 php:
   container_name: php
   build:
     context: ./docker/php
     dockerfile: Dockerfile
   volumes:
     - ./to:/var/www/html
   depends_on:
     - db
 db:
   container_name: mysql
   build:
     context: ./docker/mysql
     dockerfile: Dockerfile
   ports:
     - 3306:3306
   volumes:
     - ./docker/mysql/data:/var/lib/mysql
     - ./docker/mysql/:/etc/mysql/conf.d/
   command:
     - --default-authentication-plugin=mysql_native_password
   environment:
     MYSQL_ROOT_PASSWORD: secret
```
```Laravel
/**
* .env
*/
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:cLlHR9HwX3wd/YIaNy408bZEEOmWCFFlhteOhQMgRLA=
APP_DEBUG=true
APP_URL=http://localhost
LOG_CHANNEL=stack
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=summer_work
DB_USERNAME=root
DB_PASSWORD=secret
BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
/**
* routes/api.php
*/
Route::group(['middleware' => 'api'], function () {
   Route::get('v1/posts', 'PostController@getPost');
});
/**
* app/Http/Controllers/PostController.php
*/
<?php
namespace App\Http\Controllers;
use App\Post;
class PostController extends Controller
{
   // getPost
   public function getPost()
   {
       $posts = Post::all();
       return $posts;
   }
}
/**
* app/Post.php
*/
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
}
```
```React
export const getPosts = () => {
   return (dispatch) => {
       dispatch(getPostsRequest())
       return axios.get(`api/v1/posts`)
           .then(res =>
               dispatch(getPostsSuccess(res.data))
           ).catch(err =>
               dispatch(getPostsFailure(err))
           )
   }
}
```
### 試したこと
マイグレーションやTinkerを使用したDB操作はできます。
PostContoroller.phpをDB操作ではなく単純な連想配列を返すように変更しても機能しました。
Eloquentを使用してDB操作をした場合だけ500エラーが出ます。
### 補足情報(FW/ツールのバージョンなど)
Laravel 5.8.33
  • PHP

    31224 questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • Laravel

    2719 questions

    LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

  • Docker

    2042 questions

    Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

  • Eloquent

    98 questions

    Eloquentとは、PHPフレームワークのLaravelに最初から含まれているORM(Object-relational mapping:オブジェクト関係マッピング)です。

  • React.js

    2187 questions

    Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

1

khkhkh

khkhkh score 20

2019/08/28 16:03  投稿

ReactでLaravelのAPIを叩けない。
### 前提・実現したいこと
```ここに言語を入力
コード
```### 前提・実現したいこと
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
version: '3'
services:
 nginx:
   container_name: nginx
   build:
     context: ./docker/nginx
     dockerfile: Dockerfile
   ports:
     - 8080:80
   volumes:
     - ./docker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
     - ./to:/var/www/html
   depends_on:
     - php
 php:
   container_name: php
   build:
     context: ./docker/php
     dockerfile: Dockerfile
   volumes:
     - ./to:/var/www/html
   depends_on:
     - db
 db:
   container_name: mysql
   build:
     context: ./docker/mysql
     dockerfile: Dockerfile
   ports:
     - 3306:3306
   volumes:
     - ./docker/mysql/data:/var/lib/mysql
     - ./docker/mysql/:/etc/mysql/conf.d/
   command:
     - --default-authentication-plugin=mysql_native_password
   environment:
     MYSQL_ROOT_PASSWORD: secret
```
```Laravel
/**
* .env
*/
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:cLlHR9HwX3wd/YIaNy408bZEEOmWCFFlhteOhQMgRLA=
APP_DEBUG=true
APP_URL=http://localhost
LOG_CHANNEL=stack
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=summer_work
DB_USERNAME=root
DB_PASSWORD=secret
BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
/**
* routes/api.php
*/
Route::group(['middleware' => 'api'], function () {
   Route::get('v1/posts', 'PostController@getPost');
});
/**
* app/Http/Controllers/PostController.php
*/
<?php
namespace App\Http\Controllers;
use App\Post;
class PostController extends Controller
{
   // getPost
   public function getPost()
   {
       $posts = Post::all();
       return $posts;
   }
}
/**
* app/Post.php
*/
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
}
```
```React
export const getPosts = () => {
   return (dispatch) => {
       dispatch(getPostsRequest())
       return axios.get(`api/v1/posts`)
           .then(res =>
               dispatch(getPostsSuccess(res.data))
           ).catch(err =>
               dispatch(getPostsFailure(err))
           )
   }
}
```
### 試したこと
マイグレーションやTinkerを使用したDB操作はできます。
PostContoroller.phpをDB操作ではなく単純な連想配列を返すように変更しても機能しました。
Eloquentを使用してDB操作をした場合だけ500エラーが出ます。
### 補足情報(FW/ツールのバージョンなど)
Laravel 最新バージョン
Laravel 5.8.33
  • PHP

    31224 questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • Laravel

    2719 questions

    LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

  • Docker

    2042 questions

    Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

  • Eloquent

    98 questions

    Eloquentとは、PHPフレームワークのLaravelに最初から含まれているORM(Object-relational mapping:オブジェクト関係マッピング)です。

  • React.js

    2187 questions

    Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る