Дата записывается неправильно в базе m-d-Y вместо Y-m-d
Setei формат даты для отображения "d-m-Y", в то время как формат для записи есть в базе "Y-m-d".
Однако во время записи в базу, что-то происходит, и данные идут в формате "m-d-Y", и что данные будут искажены, особенно, если день превышает 12, то дата будет хоть 31-12-1969 автоматически, и это дата, которая записывается в базу.
установлен Laravel 4.1, и базой данных MySql.
Вот коды:
Controller
public function getEdit($id) {
$despesa = Despesas::find($id);
$despesa->valor = str_replace('.', ',', $despesa->valor);
$despesasOrigem = array('' => 'Selecione...') + DespesasOrigem::lists('descricao', 'id');
$despesasTipos = array('' => 'Selecione...') + DespesasTipo::lists('descricao', 'id');
return View::make('despesas.despesasEdit')
->with('despesa', $despesa)
->with('despesas_tipo_id', $despesasTipos)
->with('despesas_origem_id', $despesasOrigem);
}
public function postEdit() {
$dados = Input::all();
$dados['data'] = date('Y/m/d', strtotime($dados['data']));
$dados['users_id'] = Auth::User()->id;
$valida = Validator::make($dados, Despesas::$rules);
if ($valida->fails()) {
return Redirect::to('despesas/edit' . Input::get('id') )->withInput()->withErrors($valida);
} else {
$despesa = Despesas::find(Input::get('id'));
$despesa->descricao = $dados['descricao'] ;
$despesa->data = $dados['data'] ;
$despesa->valor = $str_replace(',', '.', $dados['valor']);
$despesa->users_id = $dados['users_id'] ;
$despesa->despesas_tipo_id = $dados['despesas_tipo_id'] ;
$despesa->despesas_origem_id = $dados['despesas_origem_id'] ;
$despesa->save();
$despesa = Despesas::find($despesa->id);
$despesasOrigem = array('' => 'Selecione...') + DespesasOrigem::lists('descricao', 'id');
$despesasTipos = array('' => 'Selecione...') + DespesasTipo::lists('descricao', 'id');
return View::make('despesas.despesasEdit')
->with('despesa', $despesa)
->with('despesas_tipo_id', $despesasTipos)
->with('despesas_origem_id', $despesasOrigem)
->with('sucesso', 'Despesa atualizada com sucesso!');
}
}
View
@extends('templates.master')
@section('conteudo')
<h2>Editar Despesa</h2>
@if(isset($sucesso))
{{ Alert::success($sucesso) }}
@endif
{{ Form::open() }}
{{ Form::hidden('id', $despesa->id) }}
{{ Form::label('Descrição') }}
{{ Form::input('text', 'descricao', $despesa->descricao) }}
@if($errors->first('descricao') != null)
{{ Alert::warning($errors->first('descricao', 'O campo descrição é obrigatorio.'))}}
@endif
{{ Form::label('Valor') }}
{{ Form::input('text', 'valor', $despesa->valor) }}
@if($errors->first('valor') != null)
{{ Alert::warning($errors->first('valor', 'O campo valor é obrigatório'))}}
@endif
{{ Form::label('Data da despesa') }}
{{ Form::input('text', 'data', date('d/m/Y', strtotime($despesa->data))) }}
@if($errors->first('data') != null)
{{ Alert::warning($errors->first('data', 'O campo data é obrigatório'))}}
@endif
{{ Form::label('despesas_tipo_id', 'Tipo:') }}
{{ Form::select('despesas_tipo_id', $despesas_tipo_id, $despesa->despesas_tipo_id) }}
@if($errors->first('despesas_tipo_id') != null)
{{ Alert::warning($errors->first('despesas_tipo_id', 'O campo Tipo de Despesa é obrigatório'))}}
@endif
{{ Form::label('despesas_origem_id', 'Origem:') }}
{{ Form::select('despesas_origem_id', $despesas_origem_id, $despesa->despesas_origem_id) }}
@if($errors->first('despesas_origem_id') != null)
{{ Alert::warning($errors->first('despesas_origem_id', 'O campo Origem da Despesa é obrigatório'))}}
@endif
{{ Form::submit('Enviar')}}
{{ Form::close() }}
@stop
Route
Route::controller('despesas', 'DespesasController');
.
<?php
class Despesas extends Eloquent {
protected $table = "despesas";
protected $softDelete = true;
/**
* Regras de validação da table despesas
*
* @return array
*/
public static $rules = array (
'descricao' => 'required',
'valor' => 'required|numeric',
'data' => 'required|date',
'despesas_tipo_id' => 'required',
'despesas_origem_id' => 'required',
'users_id' => 'required'
);
protected $guarded = array('id');
public function despesasTipo()
{
return $this->belongsTo('DespesasTipo','despesas_tipo_id');
}
public function despesasOrigem()
{
return $this->belongsTo('DespesasOrigem','despesas_origem_id');
}
public function user()
{
return $this->belongsTo('User','users_id');
}
}
2 answers
Тебя controller, метода postEdit()
, измените эту строку:
$dados['data'] = date('Y/m/d', strtotime($dados['data']));
, Для этого:
$dados['data'] = DateTime::createFromFormat('d/m/Y', $dados['data'])->format('Y-m-d');
В твоей view, ты также мог бы использовать класс DateTime
. В место:
{{ Form::input('text', 'data', date('d/m/Y', strtotime($despesa->data))) }}
Ты мог бы использовать:
{{ Form::input('text', 'data', with(new DateTime($despesa->data))->format('d/m/Y') }}
, Еще лучше, чем это, ты, может определить, в твой model, поля, которые будут рассматриваться как дата, через собственность защищена $dates
, так что все поля в нем указаны опорой объект Carbon, который позволяет использовать метод format()
напрямую:
class Despesas extends Eloquent
{
/* ... */
protected $dates = array('data');
/* ... */
}
, Сделав все это, в твоем view, презентация будет выглядеть следующим образом:
{{ Form::input('text', 'data', $despesa->data->format('d/m/Y') }}
Я использовал атрибут "date" HTML5, 2 преимущества:
- Не нужно конвертировать, чтобы показать на экране, потому что, HTML5 делает автоматически.
- , Приносит календарь для пользователя, чтобы выбрать дату с помощью мыши.
В Этом случае просто:
{{ Form::input('date', 'data', $despesa->data) }}
И так Просто !