我有一个使用DataList的输入,其中可以输入汽车部件类型的名称,也可以使用下拉列表.看起来像这样

<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(),它用于显示您可以根据其筛选汽车部件的值.

在我的控制器中,我正在try 查看是否有部件类型的过滤器,然后更改查询以过滤掉不匹配的查询.问题是,我在汽车零件表上没有汽车部件类型的名称,只有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();
}

我希望这对你有用.

Php相关问答推荐

如何在Livewire中验证多个 Select 字段

如何使用PHP停止foreach循环中的重复项?

使用额外的输入字段自定义WooCommerce单个产品

以编程方式更改新订单、已取消订单和失败订单的邮箱WooCommerce通知

使用.htaccess将任何路由重定向到文件

将下拉 Select 的值从WooCommerce后端保存并显示到前端

如何不重新查询模型A-&>;相关模型B-&>模型

PHP根据特定索引值从中删除子数组

限制某些产品只能在WooCommerce的特定邮政编码/邮政编码范围内发货

在带有livewire 3的laravel中使用规则方法时,无法进行实时验证

WooCommerce中特定付款方式的变更订单预留库存时间

PHP 数组中第一级 node 到 XML 的唯一名称

将一个表中的行连接为不同表MYSQL中的一列

在特征中使用类的属性

如何在 PHP 中对具有相同数组值的值求和

Google Sheets PHP API - 添加多个选项卡时出现问题

在WooCommerce可变产品中显示所选变体的自定义字段

Eloquent 的模型更新了它应该 laravel php 的更多行

我正在使用 Baryryvdh/laravel-snappy 从 HTML 导出 PDF 它正在工作但缩小了 pdf 文件

PHP - 如何获取发送到脚本的查询参数