我試圖根據價格來過濾我的產品,在視圖中使用一個表單,我把from和to作為兩個獨立的過濾器來傳遞,并從那里卡住。 以下是我的產品模型中的代碼:
public function scopeFilter($query, array $filters)
{
$query->當(
$filters[from'] ? false。
function ($query,$request) {
$query->whereBetween('price', [$request->from,$request->to] )。)
}
);
}
很明顯,這并不奏效,而且當我執行請求時,它只給我 "from "值。 有什么想法嗎? 這是我的產品控制器:
public function index()
{
$categories = Category::get();
$products = Product:: latest()->filter(request(['category','from','to'])->simplePaginate(5) 。)
return view('welcome',compact('products','categories',)。
}
現在它給了我一個錯誤 "Trying to get property 'to' of non-object"
。uj5u.com熱心網友回復:
你對請求的理解是錯誤的,你的范圍過濾函式應該是這樣的:
public function scopeFilter($query, array $filters)
{
$query->當(
($filters['from'] && $filters['to'] ) ?false。
function($query) use ($filters) {
$query-> whereBetween('price', [$filters['from'],$filters['to']])。)
}
);
}
uj5u.com熱心網友回復:
在這一刻,你只是把from的價格傳遞給關閉。
當你使用when()時,第一個引數被傳遞為閉包的第二個引數(在這種情況下,from價格...false將不會觸發閉包)。
你可以在閉包中添加一個use陳述句:
public function scopeFilter($query, array $filters)
{
$query->當(
$filters[from'] ? false。
function($query) use ($filters) {
$query-> whereBetween('price', [$filters['from'], $filters['to'] ])。
}
);
}
或者,如果你使用php >=7.4,你可以使用箭頭函式來代替:
public function scopeFilter($query, array $filters)
{
$query->當(
$filters[from'] ? false。
fn ($query) => $query-> whereBetween('price', [$filters['from'], $filters['to']] )。
);
}
此外,完全洗掉when可能更有意義,因為你真的應該在控制器中驗證值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/324229.html
標籤:
下一篇:拉威爾驗證需要這個或那個
