【发布时间】:2020-01-03 13:33:01
【问题描述】:
我有一个简单的实体,只包含一个字段“名称”:
/**
* @ORM\Table(name="gender")
* @ORM\Entity
* @codeCoverageIgnore
*/
class Gender
{
public const FEMALE = 'female';
public const MALE = 'male';
public const OTHER = 'other';
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=15, nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private string $name;
public function getName(): string
{
return $this->name;
}
public function setName(string $name): Gender
{
$this->name = $name;
return $this;
}
}
对于这个类,我尝试生成夹具并将它们插入到 sqlite db 中进行测试:
使用应用\实体\性别; 使用 Doctrine\Bundle\FixturesBundle\Fixture; 使用 Doctrine\Persistence\ObjectManager;
class GenderFixtures extends Fixture
{
public function load(ObjectManager $manager)
{
$genders = [Gender::FEMALE, Gender::MALE, Gender::OTHER];
foreach ($genders as $genderName) {
echo $genderName . PHP_EOL;
$gender = (new Gender())
->setName($genderName);
$manager->persist($gender);
}
$manager->flush();
}
}
当我打电话时
bin/console doctrine:fixtures:load --env=test
我明白了:
female
male
other
In AbstractSQLiteDriver.php line 39:
An exception occurred while executing 'INSERT INTO gender (name) VALUES (null)':
SQLSTATE[23000]: Integrity constraint violation: 19 NOT NULL constraint failed: gender.name
如您所见,我想将三个字符串用作名称。为什么插入语句中的 Fixture 不使用它们?
Symfony 4.4、PHP 7.4.1、Doctrine Fixtures 3.3.0
【问题讨论】:
-
这似乎是一个特定于 sqlite 的问题:如果我在我的开发数据库(即 MySql)上运行 bin/console 学说:fixtures:load -n 我没有这样的问题
标签: sqlite doctrine symfony4 fixtures