Нулевые значения в FactoryMuffin определяют

Я использую PhPUnit, FactoryMuffin и Faker для тестирования в Laravel с базой данных PostgreSQL. В предыдущей версии FactoryMuffin (Zizaco\FactoryMuff) я мог присваивать нулевые значения столбцам как в статическом массиве factory, так и при вызове FactoryMuff::create.

Однако это больше не работает - если я использую следующее определение:

FactoryMuffin::define('MyModel', array(
    'name' => 'word',
    'empty' => null,
    'another' => 'word'
));

когда я вызываю FactoryMuffin::create вместо передачи NULL оператору SQL INSERT, он оставляет значение пустым, поэтому я получаю:

INSERT INTO my_table ("name", "empty", "another") VALUES ('Ralph', , 'Someone');

что PGSQL не позволяет. То же самое происходит с использованием

FactoryMuffin::create('MyModel', array('empty' => null));

Любые идеи, как обойти это, помимо создания экземпляра модели и последующего назначения нулевого значения полю?


person softfrog    schedule 14.11.2014    source источник


Ответы (1)


Начиная с 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;
});
person marcanuy    schedule 24.05.2015
comment
Спасибо, это помогло! Я использовал 2.0, но вижу, что обратный вызов был доступен в 2.1 в качестве третьего параметра определения, поэтому сейчас я перешел на 2.1, а не на 3. - person softfrog; 25.05.2015