代码之家  ›  专栏  ›  技术社区  ›  Ukarus

具有时间数据的laravel视图上缺少意外数据

  •  0
  • Ukarus  · 技术社区  · 7 年前

    在Horario模型中,我有以下内容:

    protected $fillable = [ "inicio", "fin", "tipo" ];
    
    protected $dates = [
        'created_at', 
        'updated_at', 
        'inicio', 
        'fin'
    ];
    

    在控制器中,我将时间保存如下:

    $horario = new Horario;
    $horario->inicio = Carbon::createFromFormat('H:i', $request->inicio);
    $horario->fin = Carbon::createFromFormat('H:i', $request->fin);
    $horario->tipo = $request->tipo;
    $horario->save();
    

    如果inicio和fin是时间类型列,我可以将其保存在数据库中,如下所示(格式为H:i):

    horario record on mysql

    当我试图在我的视图中显示它时,laravel抛出了一个错误:

    ErrorException
    Unexpected data found.
    Unexpected data found.
    Data missing (View: C:\wamp64\www\plataforma-
    foodsys\resources\views\opciones_de_aplicacion.blade.php)
    

    在我看来,我有:

    <td>{{$horario->inicio->format("H:i")}}</td>
    <td>{{$horario->fin->format("H:i")}}</td>
    

    我不明白它为什么会抛出异常,记录在表中保存得很好,我正在尝试将其格式化为正确的时间格式。你知道为什么会这样吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   DevK    7 年前

    这是因为Laravel不将“H:i”格式识别为 date (因为这不是一个日期)。

    它将尝试将其转换为 Carbon 具有 asDateTime($val) (source) 函数,不接受 H:i 总体安排

    我建议将其作为 accessors 相反

    去除 inicio fin 从…起 protected $dates 阵列并将其放入模型中:

    use Carbon\Carbon;
    
    ...
    
    public function getInicioAttribute($val) 
    {
        return Carbon::parse($val);
    }
    
    public function getFinAttribute($val) 
    {
        return Carbon::parse($val);
    }
    

    您的代码应该可以工作。