3 回答

TA貢獻1780條經驗 獲得超4個贊
在我看來,如果您要重用它,請創建一個服務來執行該查詢并返回結果,如下所示SearchService:
<?php
class SearchService
{
public static function perform(array $params){
$sql = "SELECT distinct product_name,product_offer.quantity, product_offer.price
FROM product
inner join brand on product.brand_id = brand.brand_id
inner join brand_area on brand_area.brand_id = brand.brand_id
inner join area on area.area_id = brand_area.area_id
inner join product_offer on product_offer.product_id = product.product_id
where area.area_id = :area
and product.size_id = :size ";
return DB::select( DB::raw($sql), $params);
}
}
?>
通過這樣做,你可以打電話
SearchService::perform([...]);
得到結果。
顯然這是 version1.0,你可以通過很多方式改進它,例如讓它不是靜態的以使其可測試,還允許 getter 和 setter 存在,還有很多其他的東西,可能是有用的

TA貢獻1806條經驗 獲得超8個贊
你有一個公平的觀點,說在控制器中放置查詢看起來不正確。
此外,我認為您可以使用 LaravelDB
進行此類查詢,而無需將其編寫為原始查詢。我認為這里沒有必要進行原始查詢。Laravel?DB
?table()
、select()
和where()
其他方法應該足夠了。
實際上,您可以使用模型及其關系來編寫此代碼,但如果查詢速度很慢,最好使用查詢構建器來提高效率。
編輯:
對于一些不屬于任何我記得看到使用過的自定義特征的特定查詢,也可能是一個解決方案。

TA貢獻1906條經驗 獲得超3個贊
我正在寫我之前的評論作為答案,因為我認為它確實是您正在尋找的東西:
我建議你使用一個 Trait 來做到這一點。原因是它會讓您的代碼保持干凈,并且您以后可以重用此代碼用于其他用途。Trait 是為可重用代碼而創建的。
您將創建一個特征:
<?php
namespace App\Traits;? ? // Optional, but you could create a namespace for all your Traits if you need others
trait MyCustomTrait
{
? ? public function perform(array $params) {
? ? ? ? ?$sql = "SELECT distinct product_name,product_offer.quantity, product_offer.price
? ? ? ? ? ? ? ? FROM product
? ? ? ? ? ? ? ? inner join brand on product.brand_id = brand.brand_id
? ? ? ? ? ? ? ? inner join brand_area on brand_area.brand_id = brand.brand_id
? ? ? ? ? ? ? ? inner join area on area.area_id = brand_area.area_id
? ? ? ? ? ? ? ? inner join product_offer on product_offer.product_id = product.product_id
? ? ? ? ? ? ? ? where area.area_id = :area
? ? ? ? ? ? ? ? and product.size_id = :size ";
? ? ? ? ?return DB::select( DB::raw($sql), $params);
? ? }
}
use MyCustomTrait要使用它,只需在您的控制器范圍內編寫:并像這樣調用您的函數: $this->perform([...])。
- 3 回答
- 0 關注
- 167 瀏覽
添加回答
舉報