在我的用户注册工作流程中,我要求用户选择一个预定义的分类列表(我使用了一系列复选框)。目前,当我们移动到下一步时,我会使用这些值更新我的模型(如果未选中该框,则为空值)。它们目前不是一个数组结构,而是一个独立且不同的复选框。
我的两个问题如下:
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);
}
});
谢谢!
答案 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
}
}
}