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

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

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

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

Q&A

0回答

1582閲覧

laravelでN+1問題を解決したい

ORyohei

総合スコア18

Laravel

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

0グッド

0クリップ

投稿2020/08/06 03:19

N+1問題を解決したいです。
商品を買ったバイヤーを判別しているところで、sqlが数回実行されているのでここを解決したいです。
中間テーブルが絡んでいきて少し複雑なので困っています。。。何かアドバイスいただきたいです

Products/list.blade.php

<sold-label :initial-is-buyer-ordered-by='@json((bool)$product->orderBuyer()->count())' > </sold-label>

クエリーの処理

select count(*) as aggregate from `products` 3.32ms /vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php:23 project_haiki select * from `products` limit 10 offset 0 270μs /vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php:23 project_haiki select * from `users` where `id` = 3 limit 1 330μs /vendor/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php:52 project_haiki select count(*) as aggregate from `buyers` inner join `orders` on `buyers`.`id` = `orders`.`buyer_id` where `orders`.`product_id` = 1 580μs /vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php:23 project_haiki select * from `users` where `users`.`id` = 1 limit 1 430μs /Users/okuhataryouhei/Desktop/project/storage/framework/views/22b3889567d438559c96c40c7515953a3454e8c6.php:19 project_haiki select count(*) as aggregate from `buyers` inner join `orders` on `buyers`.`id` = `orders`.`buyer_id` where `orders`.`product_id` = 2 430μs /vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php:23 project_haiki select * from `users` where `users`.`id` = 1 limit 1 380μs /Users/okuhataryouhei/Desktop/project/storage/framework/views/22b3889567d438559c96c40c7515953a3454e8c6.php:19 project_haiki select count(*) as aggregate from `buyers` inner join `orders` on `buyers`.`id` = `orders`.`buyer_id` where `orders`.`product_id` = 3 370μs /vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php:23 project_haiki select * from `users` where `users`.`id` = 3 limit 1 230μs /Users/okuhataryouhei/Desktop/project/storage/framework/views/22b3889567d438559c96c40c7515953a3454e8c6.php:19 project_haiki select count(*) as aggregate from `buyers` inner join `orders` on `buyers`.`id` = `orders`.`buyer_id` where `orders`.`product_id` = 4 220μs /vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php:23 project_haiki select * from `users` where `users`.`id` = 3 limit 1 340μs /Users/okuh

App/Product.php

//---------------------------- //buyerとのリレーション(多対多) //product->orderBuyerで自分を買ったバイヤーの情報取得 //product->orders()->attachで中間テーブル更新 //---------------------------- public function orderBuyer(): BelongsToMany { return $this->belongsToMany('App\Buyer', 'orders','product_id', 'buyer_id')->withTimestamps(); }//第二引数には中間テーブルのテーブル名

App/Buyer.php

public function orderProduct(): BelongsToMany //buyerとのリレーション(多対多)(buyerをもとにproduct取得) { return $this->belongsToMany('App\Product', 'orders','buyer_id', 'product_id')->withTimestamps(); }

テーブル

buyersproductsorders
buyer_id
product_id

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問