【问题标题】:laravel Show only related data in search filterlaravel 在搜索过滤器中仅显示相关数据
【发布时间】:2019-03-21 12:12:34
【问题描述】:

我正在尝试创建搜索过滤器:

if ($request->has('street')) {
    $streets->where('name', 'like', '%'.$request->street.'%');
}

if ($request->has('house')) {
    $streets->whereHas('properties', function ($query) use ($request) {
        $query->where('house_number', $request->house);
    });
}

return $streets->get();

这当前获取street 数据。我想做这样的?street=b-34&house=21 并显示house 数据。

目前我只获得street 数据。

【问题讨论】:

  • 查询house时是否只想返回house数据?
  • 是的,房子数据对照那个门牌号

标签: sql laravel laravel-5 eloquent


【解决方案1】:

您的问题似乎是每个 Laravel 开发人员有一天都会遇到的问题。您忘记将查询返回给原始构造函数。

你有:

$streets->where('name', 'like', '%'. request('street') .'%');

什么时候应该有:

$streets = $streets->where('name', 'like', '%'. request('street') .'%');

您正在链接方法,因此您应该让它返回原始查询构造函数

编辑基于 cmets: 除了像我上面所说的那样不返回查询之外,您正在使用@thisiskelvin 在他的回答中指出的whereHas

你应该使用

if (request()->has('street')) {
    $streets = $streets->where('name', 'like', '%'. request('street') .'%');
}

if (request()->has('house')) {
    $streets = $streets->with(['properties' => function ($query) {
        $query->where('house_number', request('house'));
    }]);
}

return $streets->get();

【讨论】:

  • 感谢您的回复。 ?street= 返回街道的结果。我想要实现的是 ?street=1&house=abc,应该只显示房屋(属性)数据,但它应该在街道 1 中,上述查询只返回街道数据。
【解决方案2】:

您应该能够通过使用->with() eloquent 方法来实现这一点。如果请求有一个house 查询,它将返回所有properties,其中house_number 等于查询的门牌号。一旦找到将附加到返回的结果中:

if (request()->has('street')) {
    $streets = $streets->where('name', 'like', '%'. request('street') .'%');
}

if (request()->has('house')) {
    $streets = $streets->with(['properties' => function ($query) {
        $query->where('house_number', request('house'));
    }]);
}

return $streets->get();

注意:我已将 $request 更改为使用 request() 助手。

【讨论】:

  • 感谢您的回复。 ?street= 返回街道的结果。我想要实现的是 ?street=1&house=abc,应该只显示房屋(属性)数据,但它应该在街道 1 中,上述查询只返回街道。
猜你喜欢
  • 2012-12-29
  • 1970-01-01
  • 2023-03-16
  • 2019-02-07
  • 1970-01-01
  • 1970-01-01
  • 2021-06-06
  • 2017-05-29
相关资源
最近更新 更多