Я прочитал и попробовал все вещи, описанные в этот раздел документов, но я не могу заставить это работать. Это конструктор на объекте:
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
больше не нужно, так что не позаботься об этом
Если у вас определены сеттеры, т.е. 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]
для меня добавление связанных (многие-ко-много) объектных светильников, работающих таким образом
ordersServices: ['@service_*']