Symfony погрузочные устройства - PullRequest
0 голосов
/ 23 декабря 2018

У меня есть этот проект, где я пытаюсь загрузить фиктивные данные во время разработки, у меня есть два прибора

это мой первый прибор

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 голосов
/ 25 декабря 2018

кажется, что в пакете фикстур есть свои меры, когда в конце концов запрос к базе данных завершается неудачно, например, повторная очистка всей базы данных без усечения

0 голосов
/ 23 декабря 2018

Вы можете делиться приборами между файлами, используя ссылки, как показано в документации: https://symfony.com/doc/current/bundles/DoctrineFixturesBundle/index.html#sharing-objects-between-fixtures

В вашем первом файле сделайте что-то вроде этого:

$this->addReference('category', $c);

и в другом файлеВы можете получить ссылку:

$p->addCategory($this->getReference('category'));

Вы должны быть осторожны при заказе файлов фикстур.В следующем разделе документации объясняется, как обеспечить загрузку файлов в правильном порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...