Светильник DOCTRINE2

Когда я использую:

php app/console doctrine:fixtures:load --fixtures=/var/www/Symfony/src/BISSAP/ForumBundle/DataFixtures/ORM**

Я получаю следующую ошибку:

Фатальная ошибка PHP Catchable: Аргумент 1, передаваемый в BISSAP\ForumBundle\Entity\Forum::setCategory(), должен быть экземпляром BISSAP \ ForumBundle \ Entity \ Category, с указанием нуля, который вызывается в /var/www/Symfony/src/BISSAP/ForumBundle/DataFixtures/ORM/LoadForum.php в строке 40 и определяется в /var/www/Symfony/src/BISSAP/ForumBundle/Entity/Forum.php в строке 184

My Fixture - LoadForum.php:

<?php
namespace BISSAP\ForumBundle\DataFixtures\ORM;

use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use BISSAP\ForumBundle\Entity\Forum;
use BISSAP\ForumBundle\Entity\Category;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class LoadForum extends Controller implements FixtureInterface
{

 public function load(ObjectManager $manager)
 {
    $data=array(array('NAME','DESCRTIPTION','60',$manager->getRepository('BISSAPForumBundle:Category')->find('1')),
                array('NAME2','DESCRTIPTION2','60',$manager->getRepository('BISSAPForumBundle:Category')->find('2')));

    foreach ($data as $for) {
      $forum = new Forum();
      $forum->setName($for[0]);
      $forum->setDescription($for[1]);
      $forum->setOrdre($for[2]);
      $forum->setCategory($for[3]);

      $manager->persist($forum);
      }

    $manager->flush();
  }
}

1 ответ

Решение

doctrine:fixtures:load удаляет все данные из БД и загружает новый набор фикстур

Я считаю, что ваша проблема

$manager->getRepository('BISSAPForumBundle:Category')->find('1')

которые возвращают пустой результат вместо объекта Category

И, похоже, вы либо загружаете данные Форума перед Категорией, либо не считали, что БД была стерта, и у вас нет записей для Категории.

для случая 1 вы должны изменить порядок загрузки приборов - измените функцию "getOrder" для приборов категории и установите возвращаемое число ниже, чем число на форуме

для случая 2 вы также должны создать светильники для некоторых категорий

Кстати, вы должны использовать ссылку на объект, а не получать из хранилища, поэтому наиболее распространенным способом является:

  1. Создать новую ссылку для категории Светильник

    $ category = new \ MyApp \ CategoryBundle \ Entity \ Category ();

    $ Category-> SetName ();

    $ This-> AddReference('MyApp\CategoryBundle\Entity\Category-1',$ категории);

  2. Звоните по созданной ссылке для заполнения форума

    $ Форум->setCategory($this->getReference('MyApp\CategoryBundle\Entity\Category-1'));

Другие вопросы по тегам