我使用PhPUnit,FactoryMuffinFaker在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;
});

10-08 05:01