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

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

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

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

2回答

4092閲覧

laravel のトランザクションの成功メッセージと一緒にデータをDBに登録したことでできたIDも一緒に送りたい

lkjgffh

総合スコア37

PHP

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2018/02/26 06:37

前提・実現したいこと

Laravelで受け取ったリクエストの内容をDBに登録するアプリケーションを作っています
その成功メッセージと一緒にDBに値を登録したことでできたIDを返したいです

発生している問題・エラーメッセージ

{ "message": { "headers": {}, "original": { "error": "false" }, "exception": null } }

該当のソースコード

public function post(Request $request){ try{ $r_response = DB::transaction(function() use($request) { //リクエストで送られてきたものの登録処理 $user_id = $request->user_id; global $user_id; //テーブルから対象IDを取得する処理 global $goods_id; }); $r_response['message'] = response()->json([ 'result' => 'success register', 'user_id' => $user_id, 'goods_id' => $goods_id ]); return $r_response; }catch (\Throwable $exception) { $r_response['message'] = response()->json([ 'error' => 'false' ]); return $r_response; } }

試したこと

public function post(Request $request){
の直下に
$user_id = [];
$goods_id = [];と書き足しましたがそうすると

"message": { "headers": {}, "original": { "message": "success register", "user_id": [], "goods_id ": [] },

となり、入れたい場所が空になっていました

また、別のやり方としてはIDを取得した直下に
$this->Session->write('セッション名', $変数);
とかき

$r_response['message'] = response()->json([ 'result' => 'success register', 'user_id' => $user_id, 'goods_id' => $goods_id ]);

の直前で
$user_id = $this->Session->read('userIdSession');
としましたが値が取れないようでエラーメッセージが帰ってきてしまいます

ちなみに値をセッションに格納するやり方ですと、そもそも処理がとまりDBにインサートできませんがその前にただ、グローバル変数に入れて一緒に送ろうとする書き方の場合DBへの登録はできていました

idを送ろうとしないで成功メッセージだけの場合はエラーメッセージのほうが来ず、成功メッセージがちゃんと来ます

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

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

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

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

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

guest

回答2

0

自己解決

これが果たして適切なのかどうかは分かりませんが、今回やりたかったことは下記のようなコードで実現できました

まずそもそもuser_idは外部からのリクエストで取得しているのでトランザクション終了場所で$user_id = $request->user_id;のコードを記入することで取得可能でした

$goods_idに関してはグローバルに指定せずとも下記のようにして取得できました。
このコードで問題ないかは若干不明ですが・・・・。

public function post(Request $request){ try{ $r_response = DB::transaction(function() use($request) { $goods_id = テーブルから対象IDを取得する処理        return $goods_id; });      $user_id = $request->user_id; $goods_id = $r_response; $r_response['message'] = response()->json([ 'result' => 'success register', 'user_id' => $user_id, 'goods_id' => $goods_id ]); return $r_response; }catch (\Throwable $exception) { $r_response['message'] = response()->json([ 'error' => 'false' ]); return $r_response; } }

投稿2018/02/26 11:23

lkjgffh

総合スコア37

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

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

0

DB::transaction内での変数代入をその外でも利用したい場合は、一例として引数に利用しているクロージャに対して、useで変数を追加で渡してみて下さい。

$user_id = null; $goods_id = null; $r_response = DB::transaction(function() use($request,$user_id,$goods_id) { //リクエストで送られてきたものの登録処理 $user_id = $request->user_id; //テーブルから対象IDを取得する処理 $goods_id = XXXXX; });

変数へのglobalキーワードや、同一リクエスト処理で値を受け渡すためだけのセッション利用等は、必要の無い箇所で使うとコードが複雑になったり、不具合の元になります。
一度PHPの基本を再整理してみてください。

投稿2018/02/26 10:14

編集2018/02/26 11:00
aro10

総合スコア4106

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

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

lkjgffh

2018/02/26 10:57

ご指摘くださいましてありがとうございます。 続けざまに質問してしまい申し訳ないのですが、上記のように設定した変数はどのように参照すればよいのでしょうか? ご指摘いただいたとおり書き換えた後、トランザクション終了タグの後ろで$goods_id= $r_response($goods_id); というようにすれば値を参照できると思ったのですが取得できませんでした。グローバル変数の取得方法上記のような形式ではないのでしょうか?
aro10

2018/02/26 11:04

DB::transaction内では省略されている何らかのデータベース処理があるかと思いますが、グローバル変数の取得は必要ありますか? ``` #例 $user_id = $request->user_id; $goods_id = Good::first(); ```
lkjgffh

2018/02/26 11:08

このアプリケーションはスマートフォンと連携しているアプリで、スマートフォンから送った値がどういったものか(登録されたgoods詳細画面)へ移行するのに$goods_idを使いたいのでグローバル化して取得したいと思ったしだいです。
lkjgffh

2018/02/26 11:09

aro10様のご指摘どおりトランザクション内で上記のような操作をしています
lkjgffh

2018/02/26 11:17

すみません、希望している操作ができました。 このたびはご助言くださいましてまことにありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問