我有两个输入日期时间字段。 用户可以选择填写这两个字段。 对于空输入Datetime字段,我希望它在数据库中存储为Null值。 但是,当前空输入Datetime字段在数据库中存储为0000:00:00 00:00值。我应该修改什么代码?
答案 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"
两个输入,代码就像
$(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;
答案 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;
}