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

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

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

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

Q&A

解決済

2回答

425閲覧

laravelでstripe決済

keisuke713

総合スコア25

Laravel

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

0グッド

0クリップ

投稿2019/02/07 04:49

*前提、実現したいこと
laravelでecサイトを作っており、今決済画面の構築をしています。
購入する前は、購入ボタンというのがありますが、二度購入できないので購入後は商品を削除しようと考えています。

*出てくるエラー
削除しようとすると、Call to a member function delete() on null"と出てきます。

*該当するコード
blade.php

php

1<form action="{{ asset('charge') }}" method="post"> 2 {{ csrf_field() }} 3 <script 4 src="https://checkout.stripe.com/checkout.js" class="stripe-button" 5 data-key="pk_test_QlwNXP8MUtNfx48jKBr4crVv" 6 data-amount="100" 7 data-name="TEST" 8 data-description="TESTTEST" 9 data-image="https://stripe.com/img/documentation/checkout/marketplace.png" 10 data-locale="ja" 11 data-currency="jpy"> 12 </script> 13 <input type="hidden" name="id" value="$product->id"> 14 </form>

controller.php

php

1public function charge(Request $request) 2 { 3 try{ 4 Stripe::setApiKey(env('STRIPE_SECRET')); 5 6 $customer = Customer::create(array( 7 'email' => $request->stripeEmail, 8 'source' => $request->stripeToken 9 )); 10 11 $charge = Charge::create(array( 12 'customer' => $customer->id, 13 'amount' => 1000, 14 'currency' => 'jpy' 15 )); 16 17 $product = Product::find($request->id); 18 $product->delete(); 19 20 return view('admin.mercari.top'); 21 } catch (Exrption $ex) { 22 return $ex->geMessage(); 23 }

*試してみたこと
stripeに関する記事がほとんどなく試すことができませんでした。
また、dd($product)してみたところ、nullと表示されました。

以上です。
よろしくお願いします。

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

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

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

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

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

guest

回答2

0

自己解決

引数にProduct $product,findする際に$request->idでなく$request->productにしたところidを取得できた。

投稿2019/02/09 04:48

keisuke713

総合スコア25

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

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

0

PHP

1$product = Product::find($request->id); 2$product->delete();

Productが見つからなかったときのエラー処理が足りていないだけではないでしょうか。

投稿2019/02/07 05:01

kazto

総合スコア7196

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

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

keisuke713

2019/02/08 05:25

調べてみたところ、laravelの初期設定でエラー処理はすでにされているそうです。
kazto

2019/02/08 05:54

いえ、Product::find()の結果nullが返るので、nullに対してdelete()を呼ぶ形になっている、という指摘です。 > Call to a member function delete() on null というログが$productがnullであることを示しています。 ならば、値がある時だけdelete()を実施する、と変更するのが筋かと思います。
keisuke713

2019/02/08 06:07

nullに対してdeleteを呼ぶ形になっているのは理解できています。 ですので、$productがnullになっている原因を突き止めたいと考えております。
kazto

2019/02/08 07:00

nullになる原因は明確で、$request->idがDB内にない値で検索していることです。 あ、今、気づきましたが、 <input type="hidden" name="id" value="$product->id"> これは「$product->id」という文字そのものを送ってないでしょうか。
keisuke713

2019/02/09 03:51

僕は『$product->id』は$productのプライマリキーを送っているつもりでしたが、これだと文字そのものを送っていることになってしまっているのですか。 idを渡すにはどのようなコードを書けば良いのでしょうか。 もし、宜しければ教えて頂きたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問