Symfony加载装置

时间:2018-12-22 23:47:10

标签: symfony

我有这个项目,我尝试在开发过程中加载一些虚拟数据,我有两个装置

这是我的第一个装备

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及其方法获取依赖关系后,事件序列仍然与发生的事件顺序相同,我非常想知道我的代码丢失了什么,或者我忘记了什么步骤,将不胜感激

2 个答案:

答案 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)

当最终对数据库的请求失败时,例如在不截断的情况下再次清除整个数据库,