Как настроить приборы для ArrayCollection в конструкторе сущностей в NelmioAlice

Я прочитал и попробовал все вещи, описанные в этот раздел документов, но я не могу заставить это работать. Это конструктор на объекте:

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] Исправляемая фатальная ошибка: аргумент 1 передан
Doctrine \ Common \ Collections \ ArrayCollection :: __ construct () должен иметь тип массив, объект
задан, вызван в /var/www/html/reptooln_admin/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php в строке 555 и определен

Что случилось? Как мне настроить прибор?

РЕДАКТИРОВАТЬ:

я нашел этот но как я могу использовать этот подход на приборе, который я пытаюсь настроить, кто-нибудь может дать мне какой-нибудь совет?

РЕДАКТИРОВАТЬ 1:

Я немного смущен, потому что Brand сопоставлен с TargetBrand сущность и TargetBrand инвертируется Brand сущность, см. сущности ниже:

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');

И настройка Brand а также TargetBrand приспособления как следовать:

Я получил эту ошибку вместо:

[Symfony \ Component \ Debug \ Exception \ ContextErrorException] Catchable
Фатальная ошибка: аргумент 1 передан
PDI \ PDOneBundle \ Entity \ TargetBrand :: setTarget () должен быть экземпляром
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 больше не нужно, так что не позаботься об этом

1

Решение

Если у вас определены сеттеры, т.е. setTarget() а также setTargetBrand() или же addTarget() а также addTargetBrand()должно работать следующее:

\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]
1

Другие решения

для меня добавление связанных (многие-ко-много) объектных светильников, работающих таким образом

ordersServices: ['@service_*']
0

По вопросам рекламы [email protected]