0

私が使用する場合:

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

次のエラーが表示されます。

PHP Catchable 致命的エラー: BISSAP\ForumBundle\Entity\Forum::setCategory() に渡される引数 1 は、BISSAP\ForumBundle\Entity\Category のインスタンスでなければなりません。null を指定すると、/var/www/Symfony/src/BISSAP/ で呼び出されます。 40 行目の ForumBundle/DataFixtures/ORM/LoadForum.php および 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();
  }
}
4

1 に答える 1

1

doctrine:fixtures:load は DB からすべてのデータを消去し、新しいフィクスチャのセットをロードします

あなたの問題は

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

Category オブジェクトの代わりに空の結果を返す

また、カテゴリの前にフォーラムのフィクスチャをロードしたか、DB が消去されたとは考えておらず、カテゴリのレコードがないようです。

ケース 1 の場合、フィクスチャの読み込み順序を変更する必要があります。カテゴリ フィクスチャの関数「getOrder」を変更し、返された数値をフォーラムの数値よりも低く設定します。

ケース 2 の場合、一部のカテゴリのフィクスチャも作成する必要があります

ところで、リポジトリから取得するのではなく、オブジェクトへの参照を使用する必要があるため、一般的な方法は次のとおりです。

  1. カテゴリ フィクスチャの新しい参照を作成する

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

    $category->setName();

    $this->addReference('MyApp\CategoryBundle\Entity\Category-1',$category);

  2. フォーラムに記入するために作成された参照を呼び出します

    $forum->setCategory($this->getReference('MyApp\CategoryBundle\Entity\Category-1'));

于 2015-08-11T21:47:00.677 に答える