2

ドキュメントのこのセクションで説明されているすべてのことを読んで試しましたが、これを機能させることができません。これはエンティティのコンストラクタです:

public function __construct()
{
    $this->targets = new ArrayCollection();
    $this->targetBrand = new ArrayCollection();
}

そして、使用をバイパスしようとしまし__construct: falseたが、このエラーが発生しました:

[Symfony\Component\Yaml\Exception\ParseException] 11行目(" name: "付近)で解析できません。

これは、フィクスチャがどのように見えるかです:

\PDI\PDOneBundle\Entity\Brand:
    # 3 Brand per Company
    brand{1..3}:
       __construct: false
       name: <name()>
       generic_name: <name()>
       logo_url: <imageUrl(128,128)>
       description: <paragraph()>
       isi_required: <boolean(35)>
       isi_text: <realText()>
       isi_pdf_url: <url()>
       pi_required: <boolean(35)>
       pi_text: <realText()>
       pi_pdf_url: <url()>
       inactive: <boolean(35)>
       company: @company*
       createdAt: <dateTimeThisYear()>
       updatedAt: <dateTimeThisYear()>

設定しないと__construct、エラーは次のようになります。

[Symfony\Component\Debug\Exception\ContextErrorException] キャッチ可能な致命的なエラー: Doctrine\Common\Collections\ArrayCollection::__construct() に渡される引数 1 は、/var/www/html/ で呼び出される、指定されたオブジェクトの配列型でなければなりませんreptooln_admin/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php 行 555 で定義済み

なにが問題ですか?フィクスチャをどのようにセットアップすればよいですか?

編集:

私はこれを見つけましが、セットアップしようとしているフィクスチャでそのアプローチをどのように使用できますか?アドバイスをもらえますか?

編集1:

エンティティにBrandマップされ、エンティティによって反転されるため、少し混乱しています。以下のエンティティを参照してください。TargetBrandTargetBrandBrand

class Brand
{
    // other class properties

    /**
     * @ORM\OneToMany(targetEntity="TargetBrand" , mappedBy="brand")
     */
    protected $targetBrand;

    protected $targets;

    public function __construct()
    {
        $this->targets = new ArrayCollection();
        $this->targetBrand = new ArrayCollection();
    }

    // other class methods

    public function getTargets()
    {
        $targets = new ArrayCollection();
        foreach ($this->targetBrand as $target) {
            $targets[] = $target->getTarget();
        }

        return $targets;
    }

    public function setTargets($targets)
    {
        foreach ($targets as $target) {
            $targetBrand = new TargetBrand();
            $targetBrand->setBrand($this);
            $targetBrand->setTarget($target);
            $this->addTargetBrand($targetBrand);
        }
    }

    public function addTargetBrand($targetBrand)
    {
        $this->targetBrand[] = $targetBrand;
    }

    public function removeTargetBrand($targetBrand)
    {
        return $this->targetBrand->removeElement($targetBrand);
    }
}


class TargetBrand
{
    /**
     * @var int
     *
     * @ORM\Column(type="integer")
     */
    protected $priority;

    /**
     * @var Target
     *
     * @ORM\ManyToOne(targetEntity="Target", inversedBy="targetBrand")
     * @ORM\JoinColumn(name="targets_id", referencedColumnName="id")
     * */
    protected $target;

    /**
     * @var Brand
     *
     * @ORM\ManyToOne(targetEntity="Brand", inversedBy="targetBrand")
     * @ORM\JoinColumn(name="brands_id", referencedColumnName="id")
     * */
    protected $brand;

    public function setPriority($priority)
    {
        $this->priority = $priority;

        return $this;
    }

    public function getPriority()
    {
        return $this->priority;
    }

    public function setTarget(Target $targets = null)
    {
        $this->target = $targets;

        return $this;
    }

    public function getTarget()
    {
        return $this->target;
    }

    public function setBrand(Brand $brand)
    {
        $this->brand = $brand;

        return $this;
    }

    public function getBrand()
    {
        return $this->brand;
    }
}

次のようにセットを使用してフィクスチャを実行している場合:

これは私が以前に言及したセットです:

$set->addFile(__DIR__.'/Territory.yml', 'yaml');
$set->addFile(__DIR__.'/Representative.yml', 'yaml');
$set->addFile(__DIR__.'/TargetBrand.yml', 'yaml');
$set->addFile(__DIR__.'/Target.yml', 'yaml');
$set->addFile(__DIR__.'/Brand.yml', 'yaml');

$set->addFile(__DIR__.'/Company.yml', 'yaml');
$set->addFile(__DIR__.'/Media.yml', 'yaml');
$set->addFile(__DIR__.'/Message.yml', 'yaml');

$set->addFile(__DIR__.'/Email.yml', 'yaml');

設定BrandTargetBrandフィクスチャは次のとおりです。

代わりにこのエラーが発生しました:

[Symfony\Component\Debug\Exception\ContextErrorException] キャッチ可能な致命的なエラー: PDI\PDOneBundle\Entity\TargetBrand::setTarget() に渡される引数 1 は、PDI\PDOneBundle\Entity\Target のインスタンス、PDI\PDOneBundle\ のインスタンスでなければなりませんEntity\TargetBrand を指定し、/var/www/html/reptooln_admin/vendor/nelmio/alice/src/Nelmio/Alice/Loader/Base.php の 506 行目で呼び出して定義

\PDI\PDOneBundle\Entity\Brand:
    # 3 Brand per Company
    brand{1..3}:
       name: <name()>
       generic_name: <name()>
       logo_url: <imageUrl(128,128)>
       description: <paragraph()>
       isi_required: <boolean(35)>
       isi_text: <realText()>
       isi_pdf_url: <url()>
       pi_required: <boolean(35)>
       pi_text: <realText()>
       pi_pdf_url: <url()>
       inactive: <boolean(35)>
       company: @company*
       createdAt: <dateTimeThisYear()>
       updatedAt: <dateTimeThisYear()>
       targetBrand: @targetBrand*

\PDI\PDOneBundle\Entity\TargetBrand:
  # 10000 TargetBrand
  targetBrand{1..1000}:
      priority: <randomDigitNotNull()>
      target: @target*
      brand: @brand*

この場合、フィクスチャをロードする正しい順序はどれですか?

注: $targetsもう必要ないので、気にしないでください

4

2 に答える 2

2

セッターが定義されている場合、つまりsetTarget()andsetTargetBrand()またはaddTarget()andaddTargetBrand()の場合、次のように動作するはずです。

\PDI\PDOneBundle\Entity\Brand:
    brand{1..3}:
       (define your brands)
\PDI\PDOneBundle\Entity\Target:
    target{1..3}:
       (define your targets)
\PDI\PDOneBundle\Entity\TargetBrand:
    targetBrand{1..3}:
       target: @target<current()>
       brand: @brand<current()>

\PDI\PDOneBundle\Entity\Brand:
    brand{1..3}:
        (..other definitions...)
        targets: [@target1, @target2, @target3]
        targetBrand: [@targetBrand1, @targetBrand2, @targetBrand3]
于 2015-05-14T01:04:44.700 に答える