我的客戶只是要求我在產品瀏覽頁面上創建一個類似的產品部分。他希望顯示與當前查看的產品類似的價格範圍內的三種不同的產品。Laravel 4雄辯 - 類似產品基於價格
我有一個產品表(或產品雄辯模型,如果你想),這些產品可以有多個價格,其中一個可以標記爲主要價格(所以我有一對多表product_variants,這意味着變種雄辯模型)。
什麼問題?我想建立一個雄辯的查詢,可以根據選擇三個附加產品,主要價格是多麼接近。例如,我們正在查看主產品價格爲40美元的產品,但在數據庫中,我們也有這些主產品--45美元,38美元,37美元,50美元,35美元的產品。因此,我必須展示與價格最接近的產品,因此這將是38美元(僅差2美元),37美元(僅差3美元)和45美元或35美元之一(5美元差價)之一。
我知道我可以做到這一點,但我迄今爲止的解決方案(在我的頭上)將從每個方面(從價格上下)抓取三個產品,然後只檢查它們是否更接近價格。
我不是我的工作電腦上,但到目前爲止該查詢在我的腦海中存在:
$higher = Product::with(['variants' => function($q) use ($productPrice){
$q->whereMain(1);
$q->where('price', '>=', $productPice);
$q->orderBy('price','asc');
}]->where('id','!=', $productId)->get()->take(3);
像這樣的事情會讓我3種產品價格比的產品更高,更低的價格相似。
但最接近的匹配的魔力會發生在某種形式的foreach中,我正在檢查價格的減法和保存最接近的匹配。
我不喜歡這個解決方案,因爲它可能是時間研究,因爲可以高度訪問產品視圖。是的,我可以將查詢保存到Redis緩存或其他東西,但仍然...
有沒有人有更好的想法如何實現這三個產品更容易?
感謝
這個幫助了很多,現在正在工作,謝謝。 – marwellt