2013-06-24 40 views
3

我在MySQL數據庫,與QueryBuilder$table->time('timeAfter');創建具有TIME類型的「timeAfter」一欄,我已經添加了以下到我的模型:TIME列在Laravel 4

public $timestamps = false; 

public function getDates() { 
    return array ('timeAfter'); 
} 

但當我運行我的應用程序時,出現以下錯誤,看起來Date Mutator預計的是DATEDATETIME,但不是TIME列。任何想法?

InvalidArgumentException 
Unexpected data found. Unexpected data found. Data missing 
open: 
...\vendor\nesbot\carbon\Carbon\Carbon.php 
    } 

    if ($dt instanceof \DateTime) { 
    return self::instance($dt); 
    } 

    $errors = \DateTime::getLastErrors(); 
    throw new \InvalidArgumentException(implode(PHP_EOL, $errors['errors'])); 
} 
public static function createFromTimestamp($timestamp, $tz = null) 
+1

嗯,有在列根本就沒有足夠的信息構建一個DateTime對象。如果你想做任何特定的轉換,你必須創建你自己的mutator。 – rmobis

回答

4

我剛碰到同樣的問題。我Raphael_的筆記,並創建了一個mutator,它運行良好。碳解析TIME列就好了。

public function getTimeAfterAttribute($value) { 
    return Carbon::parse($value); 
} 
1

在我的情況,如@normany答案使用Carbon::parse()返回異常:

Exception with message 'DateTime::__construct(): Failed to parse time string (50:00:00) at position 0 (5): Unexpected character' 

,所以我不得不將其更改爲

return Carbon::createFromFormat('H:i:s', $value); 

在我的情況,但是, TIME列可以包含大於24小時。與'50:00:00',後天返回的值是,加上2小時,這並不是我所需要的。

因此,我改變了getTimeAfterAttribute()方法如下:

public function getTimeAfterAttribute($value) 
{ 
    list($hours, $minutes, $seconds) = explode(':', $value); 
    return CarbonInterval::create(null, null, null, null, $hours, $minutes, $seconds); 
} 

這種方式,'50:00:00',我得到這個var_dump()輸出:

class Carbon\CarbonInterval#921 (15) { 
    public $y => 
    int(0) 
    public $m => 
    int(0) 
    public $d => 
    int(0) 
    public $h => 
    int(50) 
    public $i => 
    int(0) 
    public $s => 
    int(0) 
    public $weekday => 
    int(0) 
    public $weekday_behavior => 
    int(0) 
    public $first_last_day_of => 
    int(0) 
    public $invert => 
    int(0) 
    public $days => 
    bool(false) 
    public $special_type => 
    int(0) 
    public $special_amount => 
    int(0) 
    public $have_weekday_relative => 
    int(0) 
    public $have_special_relative => 
    int(0) 
}