【问题标题】:Laravel eloquent using loopLaravel 雄辩的使用循环
【发布时间】:2019-02-05 14:55:45
【问题描述】:

我正在使用 eloquent 查询来过滤数据。我的查询是这样的,现在它工作得很好。

$users = User::where('username','LIKE','%'.request('username').'%')
            ->where('first_name','LIKE','%'.request('first_name').'%')
            ->where('last_name','LIKE','%'.request('last_name').'%')
            ->where('gender','LIKE','%'.request('gender').'%')
            ->where('password','LIKE','%'.request('password').'%')
            ->SimplePaginate(15);

我的请求数据是这样的。

但是,我需要为动态字段更新此查询。可以有不同的字段。我所做的是在关联数组中发送请求。于是,我的请求数据变成了这样,

我打算将所有请求数据放入搜索数组中。然后像上面的查询一样使用循环运行。我该怎么做?

附:我在论坛上查了一下,发现了一些类似的问题。其中一些已经过时。其他人没有解决我的问题。

【问题讨论】:

  • 你有你的数据,你想再次实现什么?为其他搜索查询更新或使用数据
  • 我想使用“搜索”关联数组使用新查询来获得相同的结果。如果我使用“搜索”数组,那么我可以在数组中放入任意数量的字段。

标签: laravel eloquent


【解决方案1】:

如果我理解正确,你可以这样做:

$search = request('search', []);
$users = User::query();

foreach($search as $field=>$value)
{
    $users = $users->where($field,'LIKE','%'.$value.'%');        
}

$users = $users->SimplePaginate(15);

【讨论】:

  • 谢谢。有用。附言这个'$users = User::query();'的目的是什么行吗?
  • @NabilFarhan 欢迎您。这是您查询的开始,因为在循环中形成User:: all 之后您没有任何条件。
【解决方案2】:

你可以试试这个。

$search = $request->get('search');

User::where(function ($q) use ($search){    
          foreach ($search as $key=>$value) {
            if($value != null ){   
                $q->where($key, 'like', "%{$value}%");  
            }
          }
 })->get();

【讨论】:

    【解决方案3】:

    where() 子句也可以接受一个数组。考虑到这一点,您可以映射您的搜索参数并将其转换为您想要的格式,然后将其输入到查询中。

    例如:

    $search = [
        'first_name' => 'John',
        'last_name'  => 'Smith'
    ];
    
    $filters = collect($search)->map(function($value, $key) {
        return  [$key, 'LIKE', "%{$value}%"];
    })->values()->toArray();
    
    return User::where($filters)->SimplePaginate(15);
    

    【讨论】:

      猜你喜欢
      • 2016-06-24
      • 2017-06-26
      • 1970-01-01
      • 1970-01-01
      • 2014-11-08
      • 1970-01-01
      • 2023-03-11
      • 2022-07-25
      • 1970-01-01
      相关资源
      最近更新 更多