夹具DOCTRINE2

时间:2015-08-11 21:34:51

标签: symfony fixture

当我使用时:

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,null给定,调用   /var/www/Symfony/src/BISSAP/ForumBundle/DataFixtures/ORM/LoadForum.php   在第40行并在中定义   第184行/var/www/Symfony/src/BISSAP/ForumBundle/Entity/Forum.php

我的夹具 - 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 个答案:

答案 0 :(得分:1)

doctrine:fixtures:load从DB中删除所有数据并加载新的灯具集

我相信你的问题是

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

返回空结果而不是Category对象

看起来您要么在分类之前加载论坛固定装置,要么您认为数据库没有被删除而且您没有任何类别的记录。

对于案例1,您应该更改灯具装载的顺序 - 更改类别灯具的“getOrder”功能,并将返回的号码设置为低于论坛的号码

对于案例2,您还应该为某些类别创建灯具

BTW你应该使用对象的引用,而不是从存储库中提取,所以常见的方法是:

  1. 为类别夹具

    创建新参考

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

    $类别 - &GT;的setName();

    $这 - &GT; addReference( 'MyApp的\ CategoryBundle \实体\类别-1',$类);

  2. 调用已创建的引用来填充论坛

    $论坛 - &GT; setCategory($这 - &GT; getReference( 'MyApp的\ CategoryBundle \实体\类别-1'));