Отношение ManyToOne в Doctrine \ ORM не возвращает правильные результаты при создании сущностей и их сохранении в базе данных.Точно такой же код, однако, возвращает присоединенные объекты, как и ожидалось при последующем вызове.
Здесь речь идет об отношениях.Первый - это класс Company, который имеет несколько связей в базе данных.
/**
* @ORM\Entity
* @ORM\Table
*/
class Company {
public function __construct() {
parent::__construct();
$this->cw_package_scope = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* @ORM\OneToMany(targetEntity="CwPackageScope", mappedBy="company")
*/
protected $cw_package_scope;
/**
* Get CwPackageScope
*
* @return CwPackageScope
*/
public function getCwPackageScope()
{
return $this->cw_package_scope;
}
public function getPublicFormat()
{
return [
'id' => $this->getId(),
'name' => $this->getName(),
'postal_code' => $this->getAddress()->getPostalCode(),
'scope' => array_values($this->getCwPackageScope()->map(
function (CwPackageScope $cw_package_scope) {
return $cw_package_scope->getPublicFormat();
}
)->toArray())
];
}
}
Второй - это один из связанных классов, CwPackageScope classs:
/**
* @ORM\Entity
* @ORM\Table
*/
class CwPackageScope {
/**
* Many CwPackageScope have One Company.
*
* @var Company $company
*
* @ORM\ManyToOne(targetEntity="Company", inversedBy="cw_package_scope")
* @ORM\JoinColumn(name="company", referencedColumnName="id")
*/
protected $company;
/**
* Get $company
*
* @return Company
*/
public function getCompany()
{
return $this->company;
}
/**
* Set $company
*
* @param Company $company $company
*
* @return self
*/
public function setCompany(Company $company)
{
$this->company = $company;
return $this;
}
}
Проблема заключается в том, что я вызываюМетод getPublicFormat () в классе Company сразу после создания Company и всех ее зависимых классов, таких как CwPackageScope, возвращает пустой массив для поля 'scope'.
Когда я выполняю отдельный последующий вызов для резервной копии, который вызывает точно такой же метод getPublicFormat (), он возвращает массив CwPackageScopes, которые находятся в базе данных.
Я не уверен, почему точно такой же код, вызываемый в первый раз, не возвращает ожидаемые области, но второй звонок делает.Я проверил, и все персистентность и транзакции, единицы работы и т. Д. Были завершены, когда был сделан вызов.
Спасибо за помощь!