Laravel搜索值数组

时间:2016-03-07 12:48:58

标签: laravel

在我的用户注册工作流程中,我要求用户选择一个预定义的分类列表(我使用了一系列复选框)。目前,当我们移动到下一步时,我会使用这些值更新我的模型(如果未选中该框,则为空值)。它们目前不是一个数组结构,而是一个独立且不同的复选框。

我的两个问题如下:

1)我读到如果我将复选框保存为数组,我就无法轻松地在数据库中搜索具有特定分类的用户。

2)如果这是真的,我对我当前的结构很好,但我需要正确验证(服务器端)至少选中一个复选框,否则会提供错误。我尝试过以下操作,但它没有返回任何内容,并且每列中都没有创建数据库记录。

if ($request->all() === "")
{
    return Request::json('you must select one');
}

数据库表迁移:

Schema::create('user_type', function (Blueprint $table) {
    $table->increments('id');
    $table->integer('user_id');
    $table->string('games');
    $table->string('art');
    $table->string('music');
    $table->string('building_stuff');
    $table->string('educational');
    $table->timestamps();
});

Javascript :(我提交为AJAX)

$('.modal-type-btn').click(function(e){
    e.preventDefault();

    if($('.checkbox-games').is(':checked'))
    {
        var games = "games";
    } else {
        var games = "";
    }

    if($('.checkbox-art').is(':checked'))
    {
        var art = "art";
    } else {
        var art = "";
    }

    if($('.checkbox-music').is(':checked'))
    {
        var music = music;
    } else {
        var music = "";
    }

    if($('.checkbox-building-stuff').is(':checked'))
    {
        var buildingStuff = "buildingstuff";
    } else {
        var buildingStuff = "";
    }

    if($('.checkbox-educational').is(':checked'))
    {
        var educational = "educational";
    } else {
        var educational = "";
    }       

    $.ajax({
        type: "POST",
        url: "/profile/setup/1",
        data: {games:games, art:art, music:music, buildingStuff:buildingStuff, educational:educational},
        error: function(data){
            console.log(data);
        },
        success: function(data){
            console.log(data);

        }
    });

谢谢!

1 个答案:

答案 0 :(得分:0)

所以,首先,您最好将它们用作数组并执行以下操作:

HTML:

<input type="checkbox" name="options[games]" value="1" />

这样,您只需获取表单数据并将其传递到$.ajax调用中:

...
data: $('form').serialize(),
....

然后在您的控制器中,检查options的长度是否至少为一个:

$options = Input::get('options');
if(count($options) > 0){ ... }

您也可能想要定义一个&#34;允许&#34;的列表。选项,然后使用它来构建您的查询:

private $_allowed_options = array('education', 'buildingStuff' ...);

public function update()
{
  $options = Input::get('options');
  foreach($this->_allowed_options as $allowed_options){
    if(array_key_exists($allowed_option, $option)){
      // add this option to our sql to add it to our user
      // as they have selected it
    }else{
      // the user didn't select this one, so add it to be removed
      // from the users 
    }
  }
}