0 レビュー
1 回答
php-Laravel:2つのコレクションを比較する最良の方法:whereIn?
カテゴリのあるテーブル、製品のあるテーブル、ユーザーが所有する製品を追跡する別のテーブルproducts_userがあります。
ページに商品を表示する場合、ユーザーが商品を所有している場合は、ボタンを[購入]から[購入]に変更する必要があります。
$category->productsを介して製品を表示します。ユーザーがすでに所有しているこれらの製品を見つけるための最も効率的な方法は何ですか?
ユーザーが所有する製品のコレクション全体をメモリにロードしたくないのは、これらが数千になる可能性があるためです。また、チェックごとにMysqlクエリを作成したくありません。
where句のオプションがあります。しかし、それでも、すべての製品をループして配列を作成することなく、この句を作成するためのよりスマートな方法があると思います。
誰かが私が良い論理を思い付くのを手伝ってくれる?ありがとう
わからない
0
レビュー
答え :
解決策:
熱心な負荷の抑制を利用して、製品に詳細情報を追加できます。この場合、user_idは NULL
またはuser_id
のいずれかであり、ユーザーが製品を購入したかどうかを意味します。
$ category = Category :: with(['products' => function($ q){
$ q-> select(['products。*'、'user_id'])
-> leftJoin('products_user'、'user_products.product_id'、'='、'products.id')
-> where(function($ q){
$ q-> whereNull('user_id')-> orWhere('user_id'、Auth :: user()-> id);
});
}])-> get();
foreach($ category as $ category){
$ products = $ category-> products;
foreach($ products as $ product){
if(empty($ product-> user_id)){
//ユーザーはまだ製品を購入していません
}
そうしないと {
//ユーザーはすでに製品を購入しています
}
}
}
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。