[英]Filter using wildcard for relationships
我有一個使用數據列表的輸入,可以在其中輸入汽車零件類型的名稱或使用下拉列表。 看起來像這樣
<input value="{{ request()->input('part-type') }}" list="part-type-list"
name="part-type" class="form-select">
<datalist id="part-type-list">
@foreach($partTypes as $partType)
<option @if(request()->input('plaintext') == $partType->name) selected
@endif value="{{$partType->name }}">{{ $partType->name }}
</option>
@endforeach
</datalist>
$partTypes 來自查詢 CarPartType::all() ,它用於顯示您可以過濾汽車零件的值。
在我的 controller 中,我試圖查看是否有零件類型過濾器,然后更改查詢以過濾掉不匹配的過濾器。 問題是我在汽車零件表上沒有汽車零件類型的名稱,而只有 ID。 這是我嘗試通過關系查詢它但它不起作用的示例。
$parts = CarPart::query();
if($request->filled('part-type')) {
$parts = $parts->where('carPartType.name', 'like', "% $request->input('part-type')%");
return $parts->get();
}
我試圖使用的關系
public function carPartType(): BelongsTo
{
return $this->belongsTo(CarPartType::class);
}
您的代碼中有兩個問題
$request->input('part-type')
不能用在引號中whereHas
進行關系約束。 if ($request->filled('part-type')) {
$value = $request->input('part-type');
$parts = $parts->whereHas('carPartType', function ($query) use ($value) {
return $query->where('name', 'like', "%$value%");
});
return $parts->get();
}
我希望這對你有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.