1

我有以下遷移:laravel:vaidation VS遷移模式規則

Schema::create('ingredients', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->string('name',10)->unique()->nullable(false); 
    $table->timestamps(); 
}); 

如果你注意到我希望字符串不超過10個字符

在我的控制,我有:

$this->validate($request, [ 
    'name' => 'bail|required|unique:ingredients|max:200', 
]); 

在控制器我提到的最大字符爲200.

所以當我填充表單中包含超過10個字符且少於200個字符的表單存儲在數據庫中。這怎麼可能。

將laravel不檢查然後遷移文件架構規則和驗證規則之間的完整性。

另外我注意到的是:如果我從控制器中刪除驗證規則並提交表單,仍然不檢查字符數w.r.t 10.它創建一個新的數據庫記錄。即使我不使用任何驗證規則,它也會檢查唯一記錄。

爲什麼檢查獨特性會被檢查,而不考慮驗證規則中的提及。

此外,遷移文件中的最大字符數(10)沒有意義。因爲有或沒有驗證規則,我可以輸入超過10個字符的名稱。

在哪裏好像我有我的驗證規則說max:2然後它顯示提交時的表單錯誤。

因此,無論驗證規則如何,遷移文件中的哪項工作都令人困惑,甚至在遷移表中提及的都不起作用。

回答

0

這是如何工作的。數據庫與PHP分開。通常假設你不真正的大數據工作,你在你的遷移創建例如100個字符列:

$table->string('name',100)->unique()->nullable(false); 

,並在驗證您使用相同的限值以下(如20個字符)。這樣,如果您想將限制提高到50個字符,則只能在應用程序中完成,而不觸及數據庫,但請記住,當您期望獲得大量數據時,這不是最佳解決方案 - 在這種情況下,您應該使用最小尺寸你需要。

Laravel不會檢查數據庫中的列最大大小。你可以嘗試爲你自己添加這樣的幫手,但可能它沒有太大的意義去做。

當你開發你的應用程序時,你必須知道發生了什麼。例如Laravel也不會奇蹟般地驗證你是否有表中的列。你需要將它添加到遷移中,如果你不這樣做,當你試圖插入數據時,你會得到異常。

0

我有兩個條件string('name',10),我使用SQLite的max:200

。它不檢查字符的數量。

注意括號中的數值參數是以下類型 名稱(如:「VARCHAR(255)」)通過的SQLite忽略 - SQLite不 強加任何長度限制(除了大型全球 SQLITE_MAX_LENGTH限制其他)上的字符串長度,BLOB或數字值爲 。

這就是爲什麼沒有考慮字符數量。

如果我沒有在驗證中提到獨特的,那麼我不能在窗體中顯示它。否則它會顯示laravel數據庫錯誤。