Отношения доктрины не сохраняются при создании - PullRequest
0 голосов
/ 23 января 2019

Отношение 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, которые находятся в базе данных.

Я не уверен, почему точно такой же код, вызываемый в первый раз, не возвращает ожидаемые области, но второй звонок делает.Я проверил, и все персистентность и транзакции, единицы работы и т. Д. Были завершены, когда был сделан вызов.

Спасибо за помощь!

...