LARAVEL 5如何将空DateTime输入存储为Null值而不是0000:00:00 00:00值

时间:2017-04-11 05:41:53

标签: laravel-5 laravel-5.3

我有两个输入日期时间字段。 用户可以选择填写这两个字段。 对于空输入Datetime字段,我希望它在数据库中存储为Null值。 但是,当前空输入Datetime字段在数据库中存储为0000:00:00 00:00值。我应该修改什么代码?

3 个答案:

答案 0 :(得分:0)

您可以使用模型观察器在属性为空时保存该属性。但请确保字段可以为空

class Flight extends Model
{
    public static function boot()
    {
        parent::boot();

        self::saving(function ($flight_model) {

            if(empty($flight_model->arriveDateTime)) unset($your_model->attributes['your_date_field1'];
            if(empty($flight_model->departDateTime)) unset($your_model->attributes['your_date_field2'];

        });

    }
}

this discussion将是一个很好的参考

<强>更新 要在控制器中执行限制,您将使用required_without_all:foo,bar,...,如doc.s中所述

  

验证字段必须存在且仅当所有其他指定字段不存在时才为空   要使用它,我们将添加新的规则,如

$rules = array(
    'arriveDateTime' => 'required_without_all:departDateTime',
    'departDateTime' => 'required_without_all:arriveDateTime',
);
$validator = Validator::make(Input::all(), $rules);

如果您正在使用规则,则只需将这两个角色附加到它们。那是控制器验证部分的。

对于视图部分,我假设您使用id="arriveDateTime"id="departDateTime"两个输入,代码就像

&#13;
&#13;
$(function() {
  <!-- if the first input value changed disable the second input -->
  $('#arriveDateTime').on('change', function() {
    if ($(this).val() == '') {
      $('#departDateTime').prop("disabled", false);
    } else {
      $('#departDateTime').prop("disabled", true);
    }
  });

  <!-- if the second input value changed disable the first input -->
  $('#departDateTime').on('change', function() {
    if ($(this).val() == '') {
      $('#arriveDateTime').prop("disabled", false);
    } else {
      $('#arriveDateTime').prop("disabled", true);
    }
  });
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<input type="text" id="arriveDateTime" />
<input type="text" id="departDateTime" />
&#13;
&#13;
&#13;

答案 1 :(得分:0)

你需要的只是雄辩的突变者

简化示例,基本上来自https://laravel.com/docs/5.4/eloquent-mutators#defining-a-mutator

$('#myCarousel').carousel({
interval: 4000
});

// handles the carousel thumbnails
$('[id^=carousel-selector-]').click( function(){
  var id_selector = $(this).attr("id");
  var id = id_selector.substr(id_selector.length -1);
  id = parseInt(id);
  $('#myCarousel').carousel(id);
  $('[id^=carousel-selector-]').removeClass('selected');
  $(this).addClass('selected');
});

// when the carousel slides, auto update
$('#myCarousel').on('slid', function (e) {
  var id = $('.item.active').data('slide-number');
  id = parseInt(id);
  $('[id^=carousel-selector-]').removeClass('selected');
  $('[id=carousel-selector-'+id+']').addClass('selected');
});

另外

我认为您的日期时间格式与class User extends Model { /* Set or mutate value of property */ public function setDateInputAttribute($value) { $this->attributes['date_input'] = $this->dateTimeOrNull($value); } /* This method should get another place, because it's not the core of this model */ private function dateTimeOrNull($value) { /* Check if given datetime is valid. Yes? Return original $value For simplicity, I use PHP's DateTime class */ if (DateTime::createFromFormat('Y-m-d H:i:s', $value) !== false) { return $value; } /* Datetime is not valid. Return null */ return null; } }

类似

答案 2 :(得分:0)

您可以使用laravel mutators。这是一个出生日期。

 public function setDob($value)
    {
       $this->attributes['dob'] = strlen($value)?            Carbon::createFromFormat('d/m/Y', $value) : null;
        
    }