10

MySQL 列を一緒に nullable で一意にすることはできますか? ユーザーが提供したい場合は、ユーザーの Email_id を格納するテーブルがあります。それ以外の場合は (null) になります。デフォルトのNULLで一意のフィールドを作成できるという他のいくつかの質問を読みました。しかし、テーブルを作成するときにこのエラーが発生します

#1067 - Invalid default value for 'email' (i make it only for test purpose)

メインテーブルはlaraveスキーマビルダークラスで生成されます

$table->text('email')->nullable()->unique(); (no default added)

データベースで

+--------------+------------------+------+-----+---------+----------------+
| Field        | Type             | Null | Key | Default | Extra          |
+--------------+------------------+------+-----+---------+----------------+ 
| email_id     | varchar(200)     | YES  | UNI | NULL    |                |

今エラーは

Duplicate entry '' for key 'users_email_id_unique' (when inserting email with empty string) 

ここで問題は、一意でヌル可能である varchar フィールドを一緒に処理する方法です。

4

2 に答える 2

11

これは古い質問であることは知っています。これは、同じ問題を抱えている他の人のためのものです。

空の文字列を追加しようとしています。列をnullableおよびuniqueにしました。つまり、やってはいけないことをしようとしているということです。複数のnull値を送信できますが、複数の空の文字列は送信できません。MySQL はを値と見なします。

または、モーダルにミューテーターを書くことができます

public function setEmailAttribute($value) {
    if ( empty($value) ) { // will check for empty string
    $this->attributes['email'] = NULL;
    } else {
        $this->attributes['email'] = $value;
    }
}
于 2016-01-30T11:33:17.690 に答える