簡體   English   中英

Laravel 用默認值替換 null

[英]Laravel replace null with default values

我一直在努力解決一些我認為在 Laravel 中非常簡單的任務。

基本上,我有一個包含多個默認值列的表,以允許用戶將某些字段留空,而不必在所有地方都寫“0”。 這是我的遷移查找參考的方式:

public function up()
{
    Schema::create('clients', function (Blueprint $table) {
        $table->id()->autoIncrement();
        $table->string('first_name')->nullable();
        $table->string('last_name')->nullable();
        $table->date('arrival_date');
        $table->date('departure_date');
        $table->smallInteger('sector')->nullable();
        $table->smallInteger('adults')->default('0');
        $table->smallInteger('children')->default('0');
        $table->smallInteger('electricity')->default('0');
        $table->smallInteger('small_places')->default('0');
        $table->smallInteger('big_places')->default('0');
        $table->smallInteger('discount')->default('0');
        $table->timestamps();
    });
}

問題是 - 我似乎找不到使用默認值的方法 - 發送帶有空字段的表單會將它們作為“空”值,這些值仍被視為值,因此嘗試創建 model 最終出現錯誤null 個值。 數據庫中的默認值和默認值 model 都不起作用——因為它們中的每一個都被覆蓋了。 默認model值供參考:

protected $attributes = [
    'adults' => 0,
    'children' => 0,
    'electricity' => 0,
    'small_places' => 0,
    'big_places' => 0,
    'discount' => 0
];

到目前為止,我找到了一些解決方案,但感覺都不對,我覺得我錯過了什么。

所以,我目前的解決方案是這樣的:

public static function add(Request $request)
{
    if (!self::validateRequest($request)) return; // Just checks if required fields are OK, doesn't change values
    Client::create(array_filter($request->all(), function ($item) {
        return !empty($item);
    }));
}

基本上,我只是從 $request 中刪除所有“空”值,因此使用數據庫中的默認值。 這個解決方案的缺點是,當我實際上想要分配一個 null 值時 - 它會被刪除。

我發現的第二個解決方案可以很好地工作,但添加了大量代碼,並且必須專門為任何 Model 制作。我可以在我的 model 中制作一個中間件/只是一個 function,它有一個可以為 null 的鍵和默認值的列表,並且如果一個鍵是 null 並且不可為空,它將用默認值替換它。 這個解決方案的問題是......我基本上是在編寫數據庫中已經存在的規則,但又一次。 這將使我的數據庫中的可空值和默認值變得多余,因為我已經在我的代碼中做了所有事情......

那么 - 是否沒有辦法,例如,使用已經編寫的遷移作為模板進行驗證或類似的東西,或者 Laravel 中是否有任何東西可以解決這個特定問題? 如果不行,有沒有比我做的更好的方法到go一下呢?

提前致謝!

有些事情我不明白。 您希望空字段默認為 0,這樣用戶就不會全部輸入 0,但您希望他們有可能輸入 null 個字段。 他們如何制作一個字段 null? 也許在輸入中添加value="0"會更容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM