首页 > 解决方案 > Laravel - 如何正确获取具有相同名称的复选框值?

问题描述

我的模型(具有 2 个主键并且同时是外键的表):

class FormationPersonnel extends Model
{
  protected $fillable = ['cin', 'id_form'];
  public $incrementing = false;
}

我用 JQuery、Ajax 创建复选框,如下所示:

var grabData = "";
    for (let i = 0; i < data.length; i++) {
      grabData +=
      `<div class="col-lg-4 col-sm-6">
      <div class="custom-control custom-checkbox">
        <input type="checkbox" name="cin[]" id="`+data[i]["cin"]+`" class="custom-control-input" value="`+data[i]["cin"]+`">
        <label for="`+data[i]["cin"]+`" class="custom-control-label">`+data[i]["cin"]+' '+data[i]["nom"]+' '+data[i]["prenom"]+`</label>
      </div>
      </div>`;
    }
    personnelsInput.html("");
    personnelsInput.append(grabData);

我将复选框命名为:

 name="cin[]"

在我的控制器中,我使用此代码,但不存储来自复选框的任何数据:

$cins = $request->cin; //I get inputs like this
foreach ($cins as $cin) {
$form_pers = new FormationPersonnel; //create new record
if ($request->has($cin)) { 
  $form_pers->id_form = $request->input('id_form');
  $form_pers->cin = $request->input($cin);
  $form_pers->save(); //save data
  }
}

正确的方法是什么?

标签: laravel

解决方案


Model检查是否有cin的正确方法是

已编辑

根据我们发表的评论,我想我知道你想要做什么,所以像下面的代码那样做以获得你需要的东西。

  • 笔记

你不知道什么$cins值,所以这就是你使用if(). 无需检查用户是否选中(复选框)。因为检查值仅通过表单发送。请在编码之前尝试了解变量中有哪些数据。

我建议您使用 dd() 或 print_r() 或其他https://laraveldaily.com/echoing-dd-vs-var_dump-vs-print_r/来检查您在变量中获得的数据。

$cins = $request->cin; //getting all checked (from checkbox) data

foreach ($cins as $cin) {
 $form_pers = new FormationPersonnel; //new model
 $form_pers->id_form = $request->id_form; //get name="id_form" from form
 $form_pers->cin = $cin; //put cin value (loop)
 $form_pers->save(); //save
}

推荐阅读