質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

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

PHP

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

949閲覧

Laravelのapi.php設定したルーティングにアクセスはできるが、実装した処理を行わない

kyoto-taichi

総合スコア10

Laravel

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

PHP

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2020/08/19 14:19

編集2020/08/19 14:25

Laravelのapi.phpで実装した、ルーティングがあります。

そのルーティングにアクセスすると、アクセス自体はできるのですが、コントローラーで実装した処理を行いません。
DBからデータを取得してを返却するのですが、Chromeのjsonviewerで確認しようとしても空のデータのみを返します。
(ワークベンチでSQLで正常であることは確認済みです。)

【確認したこと】
・artisan の route:list でルーティングを確認しました。
・Docker環境で用意しているアクセスログを確認して、200正常コードが返っていることを確認しました。
・Docker環境で用意しているSQLログを確認すると、全く関係のないSQLが走っているのを確認しました。

今回なぜルーティングは成立しているが処理内で実装したSQLが走らないのかを、どなたか教えていただけると幸いです。

PHP

1 2Route::get('/cost/pl/{year}/{month}/', 'CostController@getPlCostData'); 3 4Route::post('/cost/store/', 'CostController@store'); 5 6Route::get('/cost/latest/', 'CostController@getLatestCostData'); 7 8Route::get('/cost/list/{year}/{month}/', 'CostController@getCostListMonth'); 9 10Route::get('/cost/list/{year}/{month}/{day}/', 'CostController@getCostListDay'); 11 12Route::get('/cost/detail/{id}/', 'CostController@getIndividualCostData'); 13 14Route::get('/cost/year/', 'CostController@getCostYear'); 15 16Route::get('/cost/month/', 'CostController@getCostMonth'); 17 18Route::get('/cost/{year}/{month}/{account}/', 'CostController@getAccountCostData'); 19 20Route::get('/cost/amounts/daily/{year}/{month}/', 'CostController@getDailyAmountCostData'); 21 22// 今回は下記のルーティングが反応しません 23Route::get('/cost/daily/{year}/{month}/', 'CostController@getDailyCostData'); 24// 今回は上記のルーティングが反応しません 25 26Route::put('/cost/edit/', 'CostController@edit'); 27 28Route::delete('/cost/delete/{id}/', 'CostController@delete');

PHP

1<?php 2 3namespace App\Http\Controllers; 4 5use App\Cost; 6use App\Account; 7use Illuminate\Http\Request; 8use DB; 9use Log; 10 11class CostController extends Controller 12{ 13 . 14 . 15 . 16 . 17 . 18 19 // 日別の経費計上合計金額を取得 20 public function getDailyAmountCostData($year, $month) { 21 $param = ['year' => $year, 'month' => $month]; 22 $lineGraphData = DB::select('SELECT day, sum(price) dayAmount FROM costs WHERE year = :year AND month = :month GROUP BY day', $param); 23 foreach ($lineGraphData as $key => $value) { 24 if ($key !== 0) { 25 $lineGraphData[$key]->dayAmount = $lineGraphData[$key-1]->dayAmount + $lineGraphData[$key]->dayAmount; 26 } 27 } 28 return $lineGraphData; 29 } 30 31 // 日別の経費計上金額の推移データの取得 32 public function getDailyCostData($year, $month) { 33 $param = ['year' => $year, 'month' => $month]; 34 $lineGraphData = DB::select('SELECT day, sum(price) dayAmount FROM costs WHERE year = :year AND month = :month GROUP BY day', $param); 35 return $lineGraphData; 36 } 37} 38

今回なぜルーティングは成立しているが処理内で実装したSQLが走らないのかを、どなたか教えていただけると幸いです。

何卒よろしくお願い申し上げます。

補足事項:
apiのルーティングを試しに、"/api/a/"でアクセスできるようにすると、理想の処理をしてくれました。
apiの命名にルールなどがLaravelにはあるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

/cost/daily/{year}/{month}/の前に
/cost/{year}/{month}/{account}/の処理に進んでるのでは。

/cost/daily/2020/08/のURLでは{year}/{month}/{account}と判定される。
誤判定されないように/cost/account/{year}/{month}/{account}/などにするか
where()でしっかり制約。
https://readouble.com/laravel/7.x/ja/routing.html#parameters-regular-expression-constraints

投稿2020/08/19 21:40

kawax

総合スコア10377

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kyoto-taichi

2020/08/19 22:55

kwax様 ご回答ありがとうございます!解決できました! 似たようなルーティングの設定をしている場合は、ルーティングの誤認が起こってしまうのですね。 理解しました。 where()で制約して誤認を防ぐ方法があったとは知りませんでした。ご教示ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問