PHP 原则加载关联对象会导致错误



我有两个对象,分别名为OsobaAdresa。它们都与教义注释正确映射。 OsobaAdresa是一对一的关联。

我能够使用实体管理器分别加载奥索巴和阿德雷萨。只要奥索巴没有填充属性阿德雷萨,它就可以正常工作。但是当我使用属性 Adresa 保存 Osoba 并尝试从数据库中检索对象时,会抛出错误。

这就是我尝试获取对象 Osoba 的方式。数据库中 id 为 13 的 Osoba 包含一个指向 Adresa 表的 id。

$osoba = $entityManager->find("Osoba", 13);

抛出的错误是

Fatal error: require(): Failed opening required 'C:UsersxxxAppDataLocalTemp__CG__Adresa.php' (include_path='C:xamppphpPEAR') in C:xampphtdocsvendordoctrinecommonlibDoctrineCommonProxyAbstractProxyFactory.php on line 206

这是我的奥索巴和阿德雷萨实体。

<?php
declare(strict_types = 1);
require_once('Krajina.php');
require_once('Obec.php');
require_once ("BaseDAO.php");
use DoctrineORMMapping as ORM;
/**
 * @ORMEntity
 * @ORMTable(name="mr_adresa")
 */
class Adresa extends BaseDAO
{
/**
 * @ORMColumn(type="string", name="orientacne_cislo")
*/
private $orientacneCislo;
/**
 * @ORMColumn(type="string")
 */
private $psc;
/**
 * @ORMColumn(type="string", name="supisne_cislo")
 */
private $supisneCislo;
/**
 * @ORMColumn(type="string")
 */
private $ulica;
/**
 * @ORMOneToOne(targetEntity="Krajina")
 * @ORMJoinColumn(name="krajina_id", referencedColumnName="id")
 */
private $m_Krajina;
/**
 * @ORMOneToOne(targetEntity="Obec")
 * @ORMJoinColumn(name="obec_id", referencedColumnName="id")
 */
private $m_Obec;
public function getOrientacneCislo(): string
{
    return $this->orientacneCislo;
}
public function setOrientacneCislo(string $orientacneCislo): void
{
    $this->orientacneCislo = $orientacneCislo;
}
public function getPsc(): string
{
    return $this->psc;
}
public function setPsc(string $psc): void
{
    $this->psc = $psc;
}
public function getSupisneCislo(): string
{
    return $this->supisneCislo;
}
public function setSupisneCislo(string $supisneCislo): void
{
    $this->supisneCislo = $supisneCislo;
}
public function getUlica(): string
{
    return $this->ulica;
}
public function setUlica(string $ulica): void
{
    $this->ulica = $ulica;
}
public function getMKrajina(): Krajina
{
    return $this->m_Krajina;
}
public function setMKrajina(Krajina $m_Krajina): void
{
    $this->m_Krajina = $m_Krajina;
}
public function getMObec(): Obec
{
    return $this->m_Obec;
}
public function setMObec(Obec $m_Obec): void
{
    $this->m_Obec = $m_Obec;
}

}

<?php
declare(strict_types = 1);
require_once('Krajina.php');
require_once('Pohlavie.php');
require_once('Adresa.php');
require_once ("BaseDAO.php");
use DoctrineORMMapping as ORM;
/**
 * @ORMEntity
 * @ORMTable(name="mr_osoba")
*/
class Osoba extends BaseDAO
{
    /**
     * @ORMColumn(type="date", name="datum_narodenia")
     */
    private $datumNarodenia;
    /**
     * @ORMColumn(type="string")
     */
    private $email;
    /**
     * @ORMColumn(type="string", name="iban_dotacia")
     */
    private $ibanDotacia;
    /**
     * @ORMColumn(type="string", name="iban_sponzor")
     */
    private $ibanSponzor;
    /**
     * @ORMColumn(type="string")
    */
    private $meno;
    /**
     * --@ORMColumn(type="datetime", name="platnost_ku_datumu")
     */
//  private $platnostKuDatumu;
    /**
     * @ORMColumn
     */
    private $priezvisko;
    /**
     * @ORMColumn(name="rodne_cislo")
     */
    private $rodneCislo;
    /**
     * @ORMOneToOne(targetEntity="Krajina")
     * @ORMJoinColumn(name="krajina_id", referencedColumnName="id")
     */
    private $m_Krajina;
    /**
     * @ORMColumn(name="pohlavie", type="string")
     */
    private $m_Pohlavie;
    /**
     * @ORMOneToOne(targetEntity="Krajina")
     * @ORMJoinColumn(name="statna_prislusnost_id", referencedColumnName="id")
     */
    private $m_StatnaPrislusnost;
    /**
     * @ORMOneToOne(targetEntity="Adresa")
     * @ORMJoinColumn(name="dorucovacia_adresa_id", referencedColumnName="id")
     */
    private $m_DorucovaciaAdresa;
    /**
     * @ORMOneToOne(targetEntity="Adresa")
     * @ORMJoinColumn(name="trvale_bydlisko_id", referencedColumnName="id")
     */
    private $m_TrvaleBydlisko;
    public function getDatumNarodenia()
    {
        return $this->datumNarodenia;
    }
    public function setDatumNarodenia($datumNarodenia): void
    {
        $this->datumNarodenia = $datumNarodenia;
    }
    public function getEmail(): string
    {
        return $this->email;
    }
    public function setEmail(string $email): void
    {
        $this->email = $email;
    }
    public function getIbanDotacia(): string
    {
        return $this->ibanDotacia;
    }
    public function setIbanDotacia(string $ibanDotacia): void
    {
        $this->ibanDotacia = $ibanDotacia;
    }
    public function getIbanSponzor(): string
    {
        return $this->ibanSponzor;
    }
    public function setIbanSponzor(string $ibanSponzor): void
    {
        $this->ibanSponzor = $ibanSponzor;
    }
    public function getMeno(): string
    {
        return $this->meno;
    }
    public function setMeno(string $meno)
    {
        $this->meno = $meno;
    }
    public function getPlatnostKuDatumu(): DateTime
    {
        return $this->platnostKuDatumu;
    }
    public function setPlatnostKuDatumu(DateTime $platnostKuDatumu): void
    {
        $this->platnostKuDatumu = $platnostKuDatumu;
    }
    public function getPriezvisko(): string
    {
        return $this->priezvisko;
    }
    public function setPriezvisko(string $priezvisko): void
    {
        $this->priezvisko = $priezvisko;
    }
    public function getRodneCislo(): string
    {
        return $this->rodneCislo;
    }
    public function setRodneCislo(string $rodneCislo): void
    {
        $this->rodneCislo = $rodneCislo;
    }
    public function getMKrajina(): Krajina
    {
        return $this->m_Krajina;
    }
    public function setMKrajina(Krajina $m_Krajina): void
    {
        $this->m_Krajina = $m_Krajina;
    }
    public function getMPohlavie(): Pohlavie
    {
        return $this->m_Pohlavie;
    }
    public function setMPohlavie(Pohlavie $m_Pohlavie): void
    {
        $this->m_Pohlavie = $m_Pohlavie;
    }
    public function getMStatnaPrislusnost(): Krajina
    {
        return $this->m_StatnaPrislusnost;
    }
    public function setMStatnaPrislusnost(Krajina $m_StatnaPrislusnost): void
    {
        $this->m_StatnaPrislusnost = $m_StatnaPrislusnost;
    }
    public function getMDorucovaciaAdresa(): Adresa
    {
        return $this->m_DorucovaciaAdresa;
    }
    public function setMDorucovaciaAdresa(Adresa $m_Adresa): void
    {
        $this->m_DorucovaciaAdresa = $m_Adresa;
    }
    public function getMTrvaleBydlisko(): Adresa
    {
        return $this->m_TrvaleBydlisko;
    }
    public function setMTrvaleBydlisko(Adresa $m_TrvaleBydlisko): void
    {
        $this->m_TrvaleBydlisko = $m_TrvaleBydlisko;
    }
}

好的,我发现了问题所在。

教义

通过教义本身生成的代理对象连接到数据库。为原则创建配置时有两个选项 - 将开发模式设置为 true 或 false。当开发模式设置为 false 时,它不会每次都生成代理,只会生成一次。所以你需要将开发模式设置为true至少一次,或者自己生成类,这在这个答案中解释:https://stackoverflow.com/a/20231349/1869111

相关内容

最新更新