2017-09-16 54 views
1

對Laravel 5.5的更新似乎給我造成了一些古怪。可能是我搞砸了,但這些問題只與新版本打破 - 這個相同的代碼沒有在5.4,5.3等失敗。更大的問題是,錯誤是不一致的在同一模型 - 它更新失敗,但在商店工作。Laravel 5.5更新空日期字符串產生的數據缺少碳錯誤

我在'prog'模型上有一個名爲'decom_date'的日期字段,模型上的$日期字段被覆蓋以包含'decom_date'。用戶可以填寫新的「prog」表單,並跳過「decom_date」字段。該模型保存沒有錯誤。如果用戶編輯具有完全相同的形式相同的PROG模型,並離開「decom_date」字段留空,在Laravel 5.5出現以下錯誤只:

message "Data missing" 
exception "InvalidArgumentException" 
file "/var/www/ipfast/vendor/nesbot/carbon/src/Carbon/Carbon.php" 
line 582 

IE碳現在期待的格式,而不是一個空的字符串僅在更新時。我可以解決這一個突變基因的模型,像這樣:

public function setDecomDateAttribute($value) 
{ 
    $this->attributes['decom_date'] = $value ?: null; 
} 

沒問題 - 這工作,我認爲將停止新的突破100%......但我擔心當事情突然斷裂,尤其是在整個保存過程中似乎並不一致。這種模式在我使用日期的每個模型中都一致地失敗,並且在更新之前這些模式沒有被破壞。

任何人都可以對此有所瞭解 - 或者可能只是我做過的一些愚蠢的事情?

回答

0

我無法證實此行爲。如果您的日期爲空字符串,則無論是在更新還是創建過程中,它總是會失敗並顯示您發佈的錯誤。

通常在Laravel 5.4和5.5全球中間件堆棧包含:

 \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, 

您可以在應用程序檢查該\ HTTP \ Kernel.php

有了這個中間件emptry字符串建議立即進行刪除自動轉換爲Carbons正確處理的NULL值。

我可以想象的是,當您在創建期間跳過此字段時,您的decom_date字段甚至不會出現在請求數據中(只需在存儲方法的頂部使用dd($ request)進行檢查即可)

如果在更新方法期間將字段留空,則結果爲空字符串(如果上述中間件丟失......)

+0

非常感謝您的回答。正確 - 對於上面的中間件,Laravel應該自動將它們轉換爲null,並且我不應該有任何問題。我在L5.0中編寫了應用程序,因此必須手動執行此操作,所以我不*使用中間件。 ,這不是我的問題,我相信以前版本字段不存在,但它現在在兩個存儲/更新方法中作爲空字符串返回。可能是另一個LaravelCollective問題,但仍不能解釋差異存儲/更新。或者可能在$ request代碼中有所改變。仍然沒有快樂。 – Watercayman