🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Laravel

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

Q&A

解決済

2回答

12721閲覧

Object of class stdClass could not be converted to stringを解決したい

higa_yomityu

総合スコア41

Laravel

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

0グッド

0クリップ

投稿2021/03/11 18:42

##現状
Object of class stdClass could not be converted to stringのエラーを解決したい。

##コード

model

1class Cart extends Model 2{ 3 protected $guarded = ['id']; 4 5 public function PullCart(){ 6 $user_id=Auth::id(); 7 $subjects=DB::table('carts')->where('user_id','=',$user_id)->get('product_id'); 8 //dd($subjects);<-配列 9 10 $a=DB::table('products')->where('product_id',$subjects)->get(['product_name','price','detail','imgpath']); 11 12 return $a; 13 14 15 } 16}

cartsテーブルにはuser_idとproduct_idが入っています。
productsテーブルには商品情報が入っています。

cartsテーブルのproduct_idとproductsテーブルのproduct_idを結びつけてカートに入っている商品を出力したいと考えています。
##予想
where句が配列になっているため条件判定ができずにエラーが出ているのでは?と考えています。

##質問
①where句が配列のままでもproductsテーブルからデータを取得することは可能ですか?
②ライブラリを使用する以外で別の効率の良い記述法はありますか?

よろしくおねがいします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

php

1 2namespace App\Http\Controllers; 3 4use Illuminate\Http\Request; 5 6class Cart extends Model 7{ 8 protected $guarded = ['id']; 9 10 public function PullCart(Request $request){ 11 12 $user_id = $request->user()->id; 13 14 $subjects = DB::table('carts') 15 ->where('user_id','=', $user_id) 16 ->get('product_id'); 17 18 //dd($subjects);<-配列 19 20 $a = DB::table('products') 21 ->whereIn('product_id', $subjects->pluck('product_id')) 22 ->get(['product_name', 'price', 'detail', 'imgpath']); 23 24 return $a; 25 } 26}

投稿2021/03/12 05:01

phper.k

総合スコア3923

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

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

m.ts10806

2021/03/12 05:04

pluck()てすごく便利ですね
guest

0

エラーの通り、 whereの第2引数が期待しているのはStringであって、クラス(DB::table()が返すstdClass)ではなく、クラスはStringに
変換できないということです。
DB::table($table)->get()の返却値は厳密には配列ではなくIlluminate\Support\Collectionです。

どういうデータに対してどういうデータを取りたいのか分かりませんが、product_idだけの配列に変換したうえで
whereInするか、DB::table('carts')->where('user_id','=',$user_id)->get('product_id')JOINするように組めば良いのではないでしょうか。
まず、直にSQL組んでみるとイメージわくかと思います。

投稿2021/03/11 21:23

m.ts10806

総合スコア80875

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

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

退会済みユーザー

退会済みユーザー

2021/03/12 00:11

がんばれば2回に分けているクエリーも一つになりそうな気がする。
m.ts10806

2021/03/12 00:15

はい。たぶんJoinできます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問