当使用 Ajax Laravel 的 datepicker 为空时在 DB 中插入 NULL

Posted

技术标签:

【中文标题】当使用 Ajax Laravel 的 datepicker 为空时在 DB 中插入 NULL【英文标题】:Insert NULL in DB when datepicker is empty with Ajax Laravel 【发布时间】: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,但结果相同 【参考方案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)

以上是关于当使用 Ajax Laravel 的 datepicker 为空时在 DB 中插入 NULL的主要内容,如果未能解决你的问题,请参考以下文章

当通过 Ajax 将数据发送到 Laravel 中的控制器时,数据为空

当 Ajax 响应来自使用 select2 的 laravel 控制器时,如何检查 JQuery 附加选项中的条件?

当通过Ajax进行POST时,Laravel 5.6 CSRF令牌失败

当 PUT 通过 AJAX 用于 Laravel 资源时,方法不允许

用ajax加载laravel视图

Laravel Ajax 下拉示例