簡體   English   中英

使用通配符過濾關系

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM