簡體   English   中英

symfony2學說中的延遲加載

[英]Lazy loading in symfony2 doctrine

我在Symfony2框架(2.3.23版)中使用了Doctrine。 我有兩個實體: ProductManufacturer具有一對多關系。 實體具有小寫的字段名稱。 當我從存儲庫中檢索數據並嘗試使用以下代碼訪問延遲加載的對象時:

$repository = $this->getDoctrine ()->getRepository ( 'AtCompDbBundle:Product' );
$result = $repository->findById ( 1);
$x = $result[0]->getManufacturer ()->getName ();

我收到以下錯誤:

ContextErrorException: Notice: Undefined property: 
Proxies\__CG__\AtComp\DbBundle\Entity\Manufacturer::$Name in C:\project_dir\src\AtComp\DbBundle\Entity\Manufacturer.php line 54

我找到了一種可行的解決方法:將字段名稱更改為以大寫字母開頭。 但是,是否有任何方法可以強制教義代理對象查找以小寫字母開頭的字段名稱?

這是Product類的定義:

/**
 * @ORM\Entity(repositoryClass="AtComp\DbBundle\Repository\ProductRepository")
 * @ORM\Table(name="produkty")
 */
class Product {
    /**
     * @ORM\Column(type="integer", name="prod_id")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\ManyToOne(targetEntity="Manufacturer")
     * @ORM\JoinColumn(name="prod_producent_id", referencedColumnName="pr_id")
     */
    protected $manufacturer;

    /**
     * Get id
     *
     * @return integer
     */
    public function getId() {
        return $this->id;
    }

    /**
     * Set manufacturer
     *
     * @param \AtComp\DbBundle\Entity\Manufacturer $manufacturer            
     * @return Product
     */
    public function setManufacturer(\AtComp\DbBundle\Entity\Manufacturer $manufacturer = null) {
        $this->manufacturer = $manufacturer;

        return $this;
    }

    /**
     * Get manufacturer
     *
     * @return \AtComp\DbBundle\Entity\Manufacturer
     */
    public function getManufacturer() {
        return $this->manufacturer;
    }
}

以及Manufacturer類的定義:

/**
 * @ORM\Entity
 * @ORM\Table(name="producent")
 */
class Manufacturer
{
    /**
     * @ORM\Column(type="integer", name="pr_id")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    // CHANGE OF THE DEFINITION OF THIS FIELD INTO 
    //
    // protected $Name;
    //
    // SOLVES THE PROBLEM...
    /**
     * @ORM\Column(type="string", length=100, name="pr_name")
     */
    protected $name;

    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->Id;
    }

    /**
     * Set name
     *
     * @param string $name
     * @return Manufacturer
     */
     public function setName($name)
    {
        $this->Name = $name;
        return $this;
    }

    /**
     * Get name
     *
     * @return string 
     */
    public function getName()
    {
        return $this->Name;
    }
}

屬性名稱應為小寫,對set方法執行相同的操作:

/**
 * Get name
 *
 * @return string 
 */
public function getName()
{
    return $this->name;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM