2017-04-07 22 views
0

次のコードは、データベース内で空の値を返し、データベースから空のStringを取得します。Laravel 5.4データベースにNULLを保存しないでください

1)あなたのテーブルにnullableで確認company列を作成します。

$customer->update(['company' => NULL]); 
+0

あなたはdbからそれを得るときにNULLをしますか? – dparoli

+0

@dparoliはい、フィールドはオプションであり、nullである可能性があります。nullの場合はnullを返し、空の文字列ではなく、空のフィールドをデータベースに入れます。 –

答えて

5

あなたは3つの事を考慮する必要があります。それがなければnullをそこに入れることはできません。

2)あなたはCustomerモデル列の$fillable性質を持っていることを確認してくださいcompany

3)あなたはCustomerモデル内の任意のミューテータを持っていないことを確認 - あなたは値を変更する場合がありますsetCompanyAttribute方法を持っていない確認してください自動的に空の文字列には、データベース内のフィールドがnullになりたいとあなたはすべてのミューテーターを使用しない場合は、

+0

あなたの答えに感謝し、エラーが見つかりました会社のためのミューテータ:// –

1

SOLUTION

をゼロに設定すると事は大丈夫です。

私の場合、次のスニペットでミューテータを使用していますか?

public function setCompanyAttribute($value) 
{ 
    $this->attributes['company'] = ucfirst($value); 
} 

次に、$ valueがnullであるかどうかを確認し、手動でnullに設定する必要があります。それ以外の場合は、空の文字列になります。

すべてのモデルで自動的に行うには、EventServiceProvider内で空の文字列をnullに戻すことができます。

まず、すべての属性をモデルからチェックし、一時的な配列に設定することが重要です。モデルインスタンスのsetAttribute()メソッドの内部で、ミューテータが存在する場合にチェックが行われます。しかし、それはあなたが望んでいないものです。それは、定義されたミューテータを持つすべてのフィールドを空白にするためです。代わりに、setRawAttributeを使用して古い属性を一時配列のもので上書きします。

これは安全です。チェックされた値が空の文字列でない場合は、そのフィールドに既に存在する値が使用されるためです。それ以外の場合は、空の文字列の場合はNULLが設定されます。

希望すると助かります!

+0

これはあなたに受け入れられた変更とオリジナルの質問 –

+0

で提示されなかった現在のコードに非常に奇妙です@MarcinNabiałeksry私はそれを元に戻しました。次の読者が私がそれをどのように修正したかを知ることが有用であると思った。あなたの回答には、見直しが必要な部分が記載されていますが、鉱山は可能な解決策を示しています。 –

関連する問題