【问题标题】:Problem with displaying results from search form in Laravel在 Laravel 中显示搜索表单结果的问题
【发布时间】:2025-05-17 08:40:01
【问题描述】:

我在 Laravel 中构建了一个广告/属性应用程序。我有一个带有复选框的过滤器的搜索表单。当我从同一个请求中选择两个选项时遇到问题,例如供应,需求 PropertyBidAsk 我只从需求中得到结果,而不是两者,我也想在提交表单后同时检查两者。供应和需求是类别表中类别列中的值。任何帮助表示赞赏。这是我的代码。

CategoryController.php:

public function search(Request $request, Property $property)
{
    $category = $property->category;

    $query = Property::query();

    if ($request->has('propertyBidAsk')) {
        $request->get('propertyBidAsk');
    }

    if ($request->propertyBidAsK == 'supply' && $request->propertyBidAsk== 'demand') {
        $query->whereHas('category', function ($query) use ($request) {
            $query->where('category', 'like', '%' . $request->propertyBidAsk . '%');
        });
    } elseif ($request->propertyBidAsk == 'supply') {
        $query->whereHas('category', function ($query) use ($request) {
            $query->where('category', 'like', '%' . 'supply' . '%');
        });
    } else if ($request->propertyBidAsk == 'demand') {
        $query->whereHas('category', function ($query) use ($request) {
            $query->where('category', 'like', '%' . 'demand' . '%');
        });
    }

    $results = $query->paginate(6);

    return view('search', compact('category', 'results', 'request'));
}

search.blade.php:

<div class="col-md-2 mb-6">
    <h5>Payment Method</h4>
    <div class="d-block my-3">
        <div class="custom-control custom-checkbox">
            <input id="supply" name="propertyBidAsk" value="supply" type="checkbox" class="custom-control-input" @if(old('propertyBidAsk', $request->propertyBidAsk ?? 'default') === 'supply') checked @endif>
            <label class="custom-control-label" for="supply">supply</label>
        </div>
        <div class="custom-control custom-checkbox">
            <input id="demand" name="propertyBidAsk" value="demand" type="checkbox" class="custom-control-input" @if(old('propertyBidAsk', $request->propertyBidAsk ?? 'default') === 'demand') checked @endif>
            <label class="custom-control-label" for="demand">demand</label>
        </div>
    </div>
</div>

【问题讨论】:

  • $request-&gt;propertyBidAsK == 'supply' &amp;&amp; $request-&gt;propertyBidAsk== 'demand' 一个字符串怎么可能有两个不同的值?
  • 也许你的意思是||而不是&amp;&amp;
  • @Jerodev 我知道,但我尝试了一切,但没有任何效果。这只是为了让某人了解我正在尝试做的事情并在可能的情况下帮助我。我不知道如何解决这个问题
  • 也许你可以删除你的 if 条件,然后把这个 $query->where('category', 'like', '%' . $request->propertyBidAsk . '%');跨度>
  • 如果您的请求具有您想要的正确值,请尝试使用dd($request-&gt;propertyBidAsk);

标签: php laravel


【解决方案1】:

要获得具有相同名称 attr 的多选输出,请将复选框输入的名称更新为 propertyBidAsk[] 作为数组。您将获得输入数组。

<input id="supply" name="propertyBidAsk[]" value="supply" type="checkbox" class="custom-control-input" @if(old('propertyBidAsk', $request->propertyBidAsk ?? 'default') === 'supply') checked @endif>


<input id="demand" name="propertyBidAsk[]" value="demand" type="checkbox" class="custom-control-input" @if(old('propertyBidAsk', $request->propertyBidAsk ?? 'default') === 'demand') checked @endif>

在控制器中将获取值。

public function search(Request $request, Property $property)
{
    $category = $property->category;

    $query = Property::query();

    if ($request->has('propertyBidAsk')) {
        $request->get('propertyBidAsk');
    }


    $propertyBidAsk = $request->input('propertyBidAsk'); //$propertyBidAsk will get in array

    if (in_array('supply', $propertyBidAsk)  && in_array('demand', $propertyBidAsk)){
        $query->whereHas('category', function ($query) use ($request) {
            $query->where('category', 'like', '%demand%')->orWhere('category', 'like', '%supply%')
        });
    } else if(in_array('supply', $propertyBidAsk)){
        $query->whereHas('category', function ($query) use ($request) {
            $query->where('category', 'like', '%' . 'supply' . '%');
        });
    } else  if(in_array('demand', $propertyBidAsk)){
        $query->whereHas('category', function ($query) use ($request) {
            $query->where('category', 'like', '%' . 'demand' . '%');
        });
    }

    $results = $query->paginate(6);

    return view('search', compact('category', 'results', 'request'));
}

【讨论】:

  • 我现在收到此错误“数组到字符串的转换”。
  • 对于多复选框需要通过数组传递名称 attr。 print_r $propertyBidAsk 你会得到基于检查值的结果
  • 它现在可以工作了,我得到了正确的结果。只是我的复选框在提交后不会保持选中状态。如何解决?我当然会接受你的回答。谢谢
  • 您需要更改 @if(old('propertyBidAsk', $request->propertyBidAsk ?? 'default') === 'supply') 检查 @endif>
【解决方案2】:

作为@Shivendra Singh 的回答,你可以这样做,你也可以这样做

<input id="supply" name="propertyBidAsk1" value="supply" type="checkbox" class="custom-control-input" @if(old('propertyBidAsk', $request->propertyBidAsk ?? 'default') === 'supply') checked @endif>


<input id="demand" name="propertyBidAsk2" value="demand" type="checkbox" class="custom-control-input" @if(old('propertyBidAsk', $request->propertyBidAsk ?? 'default') === 'demand') checked @endif>

你看到你不能在一个表单元素中使用相同的名字,它总是会得到第一个值。

然后在你的控制器中

if (!empty($request->propertyBidAsK1) && !empty($request->propertyBidAsk2) {
        $query->whereHas('category', function ($query) use ($request) {
            $query->where('category', 'like', '%' . $request->propertyBidAsk1 . '%')
                  ->orWhere('category', 'like', '%' . $request->propertyBidAsk2 . '%');
        });
    } elseif (!empty($request->propertyBidAsk1)) {
        $query->whereHas('category', function ($query) use ($request) {
            $query->where('category', 'like', '%' . 'supply' . '%');
        });
    } else if (!empty($request->propertyBidAsk2)) {
        $query->whereHas('category', function ($query) use ($request) {
            $query->where('category', 'like', '%' . 'demand' . '%');
        });
    }

希望对你有帮助

【讨论】:

  • 有了这个,它会检查两个复选框,但我只得到供应而不是需求的结果
最近更新 更多