我使用PhPUnit,FactoryMuffin和Faker在Laravel中进行测试,使用PostgreSQL数据库。在先前版本的FactoryMuff In(Zizaco\FactoryMuff)中,我可以为静态factory数组中的列和调用FactoryMuff::create时的列分配空值。
但是,如果我使用以下定义,这将不再有效:
FactoryMuffin::define('MyModel', array(
'name' => 'word',
'empty' => null,
'another' => 'word'
));
当我调用FactoryMuffin::create而不是将空值传递给SQL INSERT语句时,它将值留空,因此我得到:
INSERT INTO my_table ("name", "empty", "another") VALUES ('Ralph', , 'Someone');
PGSQL不允许的。同样的事情发生在
FactoryMuffin::create('MyModel', array('empty' => null));
除了实例化模型然后将空值赋给字段之外,还有什么办法绕过这个问题呢?
最佳答案
由于FactoryMuffin 2.1(和3.*),您可以利用回调功能,例如:
FactoryMuffin::define('MyModel', array(
'name' => 'word',
'empty' => null,
'another' => 'word'
))->setCallback(function ($object, $saved) {
$object->empty = null;
});
在FactoryMuffin 2.1中,回调设置为定义的第三个参数:
FactoryMuffin::define('MyModel', array(
'name' => 'word',
'empty' => null,
'another' => 'word'
), function ($object, $saved) {
$object->empty = null;
});