【问题标题】:Insert NULL in DB when datepicker is empty with Ajax Laravel当使用 Ajax Laravel 的 datepicker 为空时在 DB 中插入 NULL
【发布时间】:2017-07-03 23:53:35
【问题描述】:

我使用 laravel,在我看来我有一个这样的输入日期选择器:

{!! Form::text('DESMES_Date_Analyses',null ,['class' => 'form-control datepicker']) !!}

使用此代码:

$('.datepicker').datepicker({
        format: 'yyyy-mm-dd',
        todayHighlight: true,
        language : 'fr'
    });

我得到这样的价值:

var date_analyses = $(this).find("input[name=DESMES_Date_Analyses]").val();

之后我在数据库中插入带有 Ajax 请求的值:

$.ajax({
            url: './register',
             headers: {'X-CSRF-TOKEN': token},
            data: {
                 DESMES_Date_Analyses : date_analyses
            },
            type: 'POST',
            datatype: 'JSON'
)};

在我的控制器中我这样做了:

 public function register(Request $request) {
    if($request->ajax()) {
        Mesures::create($request->all());
    }
}

但如果该值为空,在我的数据库中我有 1900-01-01,我只想要 NULL 而不是这个默认日期。 我该怎么做?

在将它发送到我的控制器之前,我尝试在 javascript 中将 date_analysiss 设置为 null,但它不起作用...谢谢!

【问题讨论】:

  • 'date_analysiss' 真的是空的吗?
  • 是的,如果 date_analysiss 不为空,我尝试在将其发送到我的控制器之前直接在 javascript 中将其设置为 null,但结果相同

标签: javascript ajax database laravel datepicker


【解决方案1】:

您可以将NULL 传递为空值状态。

注意:列必须可以为空。

public function register(Request $request) {

    $data = $request->input();

    if($data['DESMES_Date_Analyses'] == ''){
        $data['DESMES_Date_Analyses'] = NULL;
    }

    if($request->ajax()) {
        Mesures::create($data);
    }
}

【讨论】:

    【解决方案2】:

    我找到了解决方案:在我的控制器中,就在插入请求之前:

    if($request->DESMES_Date_Analyses==""){$request->offsetSet('DESMES_Date_Analyses', NULL);}
    

    【讨论】:

      【解决方案3】:

      首先,您必须在要设为可空的表字段上设置nullable()

      $table->date('DESMES_Date_Analyses')->nullable();
      

      需要考虑的一些事情是,

      • 字段不能是唯一的

      在那之后(也许),要做的一件重要的事情是在保存之前对您的DESMES_Date_Analyses 参数进行一些手动检查(并说您还有其他字段,例如名称。)。

      .......
      $data = [];
      $data['name'] == $request->get('name');
      if($date_analyses = $request->get('DESMES_Date_Analyses')) //i.e not null/empty
      {
          $data['DESMES_Date_Analyses'] = date_analyses;        
      }
      Mesures::create($data); //so if date_analyses is not in the field it is saved as NULL
      

      这意味着如果DESMES_Date_Analyses 不存在,则查询将排除DESMES_Date_Analyses 并将该字段设置为NULL。这意味着查询可能如下所示:

      insert into the_table ('name') values ('some name'); //excluding the field `DESMES_Date_Analyses`
      

      【讨论】:

        【解决方案4】:

        我认为这是您的数据库表,它插入了 1900-01-01,而为 date_analysiss 传递了一个空值。所以检查一次。

        【讨论】:

        • 当我在我的数据库中尝试使用 SQL 时,我可以为此列插入 NULL
        • 表中该列的字段类型是什么?它是否分配了任何默认值?
        • 同样在控制器中,使 date_analyays 为空。像这样检查 dd($this->date_analysys)
        猜你喜欢
        • 2016-05-16
        • 1970-01-01
        • 2015-07-07
        • 1970-01-01
        • 2013-09-13
        • 1970-01-01
        • 2014-09-10
        • 1970-01-01
        • 2015-08-26
        相关资源
        最近更新 更多