我有这个项目,我尝试在开发过程中加载一些虚拟数据,我有两个装置
这是我的第一个装备
use AppBundle\Entity\Categorie;
use AppBundle\Entity\Produit;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
class CatFixtures extends Fixture
{
public function load(ObjectManager $manager)
{
$catlib = array('Samrtphones', 'ordinateurs', 'voitures');
$i = 0;
$sc = scandir('/home/moxched/Bureau/e-commerce/src/DataFixtures/images/img_cat');
foreach ($sc as $file) {
if (($file != '.') && ($file != '..')) {
copy('/home/moxched/Bureau/e-commerce/src/DataFixtures/images/img_cat' . '/' . $file, '/home/moxched/Bureau/e-commerce/web/uploads/cat_img' . '/' . $file);
$c = new Categorie();
$c->setImage($file);
$c->setDescription('Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua');
$c->setLibelle($catlib[$i]);
$c->setSlug($c->getLibelle());
$manager->persist($c);
$i = $i + 1;
}
}
$manager->flush();
}
}
这是我的第二个固定装置
use AppBundle\Entity\Categorie;
use AppBundle\Entity\Produit;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\DataFixtures\DependentFixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
class ProdFixtures extends Fixture implements ODependentFixtureInterface {
private function getPrix(){
return rand(12.67*10,986.64*10)/10;
}
public function load(ObjectManager $manager)
{
$i = 1;
$j = 1;
$sp = scandir('/home/moxched/Bureau/e-commerce/src/DataFixtures/images/img_prod');
foreach ($sp as $file) {
if (($file != '.') && ($file != '..')) {
copy('/home/moxched/Bureau/e-commerce/src/DataFixtures/images/img_prod' . '/' . $file, '/home/moxched/Bureau/e-commerce/web/uploads/prod_img' . '/' . $file);
$p = new Produit();
$p->setLibelle(str_replace('.jpg', '', $file));
$p->setDescCourt('Ut enim ad minim veniam, quis nostrud exercitation ullamc');
$p->setDescLong('Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.');
$p->setSlug($p->getLibelle());
$p->setPrix($this->getPrix());
$p->setImagePrinc($file);
$p->setImage1($file);
$p->setImage2($file);
$p->addCategory($manager->getRepository(Categorie::class)->find($i));
$manager->persist($p);
$j = $j + 1;
if ($j = 6) {
$i = $i + 1;
$j = 1;
}
}
}
$manager->flush();
// TODO: Implement load() method.
}
function getDependencies()
{
return array(
CatFixtures::class,
);
}
}
当我加载我的装置时,它会清除数据库,然后加载我的第一个装置,然后再次清除数据库,然后尝试加载我的第二个装置,因为第二个装置取决于第一个被卡住的装置,我尝试使用OrderedFixturesInterface及其方法来指定顺序和DependentFixturesInterface及其方法获取依赖关系后,事件序列仍然与发生的事件顺序相同,我非常想知道我的代码丢失了什么,或者我忘记了什么步骤,将不胜感激
答案 0 :(得分:0)
您可以使用“引用”在文件之间共享灯具,如文档所示:https://symfony.com/doc/current/bundles/DoctrineFixturesBundle/index.html#sharing-objects-between-fixtures
在第一个文件中执行以下操作:
$this->addReference('category', $c);
在您的其他文件中,您可以获取参考:
$p->addCategory($this->getReference('category'));
在订购灯具文件时必须小心。文档的以下部分将说明如何确保文件以正确的顺序加载。
答案 1 :(得分:0)
当最终对数据库的请求失败时,例如在不截断的情况下再次清除整个数据库,