Laravel - 多字段搜索表单

时间:2015-04-16 12:31:47

标签: php mysql forms laravel

我建立一个带有laravel的表单来搜索用户,这个表单有多个字段,如

  1. 年龄(必须)
  2. 爱好(可选)
  3. 用户喜欢什么(可选)
  4. 还有其他人来
  5. 对于年龄,用户可以在列表中选择(18 +,18-23,23-30,30 +等...)我的问题是我想知道如何将这些结合起来将字段转换为一个返回视图的查询。

    现在,我有这样的事情:

            if(Input::get('like')){
            $users = User::where('gender', $user->interested_by)->has('interestedBy', Input::get('like'))->get();
            if(strlen(Input::get('age')) == 3){
                $input = substr(Input::get('age'),0, -1);
                if(Input::get('age') == '18+' || Input::get('age') == '30+' )
                {
                    foreach ($users as $user)
                    {
                        if($user->age($user->id) >= $input){
                            $result[] = $user;
                            // On enregistre les users étant supérieur au if plus haut
                        }
                        else
                            $result = [];
                    }
                    return view('search.result', ['users' => $result]);
                }
                elseif (strlen(Input::get('age')) == 5) {
                $min = substr(Input::get('age'), 0, -3);
                $max = substr(Input::get('age'), -2);
                $result = array();
                foreach($users as $user)
                {
                    if($user->age($user->id) >= $min && $user->age($user->id) <= $max)
                        $result[] = $user;
                }
                return view('search.result', ['users' => $result]);
                }
        }
        else
            $users = User::all();
    

    所以问题是会有2或3个可选字段来了,我想查询每个输入如果空但我不知道该怎么做,我把年龄保持在结束是因为它是强制性的,但我不知道它是否是好事。 实际上这个代码现在有效,但如果我有另一个字段,我不知道如何查询每个输入,我知道我必须删除我的位置并在最后执行但是我想为最后一次查询添加get ..

    编辑:我的模特:

    User.php

     public function interestedBy()
        {
            return $this->belongsToMany('App\InterestedBy');
        }
    

    在InterestedBy.php中也是如此

    class InterestedBy extends Model{
    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'interested_by';
    
    public function users()
    {
        return $this->belongsToMany('App\User');
    }
    

    }

2 个答案:

答案 0 :(得分:1)

您可以使用查询构建器执行此操作,如下所示

答案 1 :(得分:1)

您可以这样做的方法是使用查询范围(更多关于here的信息),然后检查可选字段是否有输入。

这是一个例子

在用户模型中

//Just a few simple examples to get the hang of it.

public function scopeSearchAge($query, $age)
{
   return $query->where('age', '=', $age);
  });
}

public function scopeSearchHobby($query, $hobby)
{
   return $query->hobby()->where('hobby', '=', $hobby);
  });
}

在您的控制器内

public function search()
{
  $queryBuilder = User::query();

  if (Input::has('age'))
  {
     $queryBuilder ->searchAge(Input::get('age'));
  }

  if (Input::has('hobby'))
  {
     $queryBuilder->searchHobby(Input::get('hobby'));
  }

  $users= $queryBuilder->get();

}