我在Laravel(postgresql)中有以下架构
Schema::create('members', function(Blueprint $table)
{
$table->increments('id');
$table->string('lname');
$table->string('fname');
$table->string('mname')->nullable();
$table->string('ename', 10)->nullable();
$table->unique(array('lname', 'fname', 'mname'));
});
正如您所注意到的,我有一个由lname
,fname
和mname
组成的复合唯一键。但是我已将mname
设置为nullable()
,因为并非所有人都有中间名。
但是,在向数据库添加数据时(postgresql)
DB::table('students')->insert(
array(
array(
'lname' => 'Last 1',
'fname' => 'First 1'
),
array(
'lname' => 'Last 1',
'fname' => 'First 1'
)
)
);
保存成功!我做错了吗?这是什么解决方法?请帮忙。
答案 0 :(得分:3)
记住基本规则:
NULL!= NULL or NULL <> NULL
即使两者都具有NULL
值,也无法进行比较,因为它们未定义。 NULL
并不等同。 NULL
等于未定义。想想这就像NULL
就像查克诺里斯一样,因为没有什么能比得上查克诺里斯。
因此你的钥匙:
Last1 NULL First1
Last1 NULL First1
独特,因为NULLS
无法比较。
要使其正常工作,请将NULL
中间名默认为''
字符串或零长度字符串。