2015-08-21 57 views
1

我知道這是一個經常性的問題,而是創造200個實體和運行之間的OneToOne關係後的PHP應用程序/控制檯學說:架構:驗證「我得到這個錯誤:學說OneToOne我逼瘋了

'[Mapping] FAIL - The entity-class 'HO\CisBundle\Entity\AffiliateSalesAccounts' mapping is invalid: 
* The association HO\CisBundle\Entity\AffiliateSalesAccounts#affiliate refers to the inverse side field HO\HasoffersBundle\Entity\Affiliate#affiliateSalesAccounts which does not exist.' 

這與兩個實體的部分代碼:

AffiliatesSalesAccount實體

namespace HO\CisBundle\Entity; 

use HO\HasoffersBundle\Entity\Affiliate; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* 
* @ORM\Table(name="AffiliateSalesAccounts") 
* @ORM\Entity() 
* @ORM\HasLifecycleCallbacks 
*/ 
class AffiliateSalesAccounts { 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    * 
    */ 
    private $id; 

    /** 
    * @var \HO\HasoffersBundle\Entity\Affiliate 
    * 
    * @ORM\OneToOne(targetEntity="HO\HasoffersBundle\Entity\Affiliate", inversedBy="affiliateSalesAccounts") 
    * @ORM\JoinColumn(name="affiliate_id", referencedColumnName="id") 
    * 
    */ 
    private $affiliate; 

    ... 

    /** 
    * @param Affiliate $affiliate 
    */ 
    public function setAffiliate(Affiliate $affiliate) 
    { 
     $this->affiliate = $affiliate; 
    } 

    /** 
    * @return Affiliate 
    */ 
    public function getAffiliate() 
    { 
     return $this->affiliate; 
    } 
} 

加盟實體

namespace HO\HasoffersBundle\Entity; 

use HO\CisBundle\Entity\AffiliateSalesAccounts; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* 
* @ORM\Table(name="ho_Affiliate") 
*/ 
class Affiliate 
{ 


    /** 
    * @var AffiliateSalesAccounts 
    * 
    * @ORM\OneToOne(targetEntity="HO\CisBundle\Entity\AffiliateSalesAccounts", mappedBy="affiliate") 
    */ 
    private $affiliateSalesAccounts; 


    .... 

    /** 
    * @param \HO\CisBundle\Entity\AffiliateSalesAccounts $affiliateSalesAccounts 
    */ 
    public function setAffiliateSalesAccounts($affiliateSalesAccounts) 
    { 
     $this->affiliateSalesAccounts = $affiliateSalesAccounts; 
    } 

    /** 
    * @return \HO\CisBundle\Entity\AffiliateSalesAccounts 
    */ 
    public function getAffiliateSalesAccounts() 
    { 
     return $this->affiliateSalesAccounts; 
    } 

} 

我有兩個實體之間的其他類似的OneToOne關係,它的偉大工程。我

有人能幫助我嗎?

非常感謝..

+0

試着改變你的'targetEntity'屬性'targetEntity = 「\ HO \ HasoffersBundle \實體\加盟」'和'targetEntity = 「\ HO \ HasoffersBundle \實體\ AffiliateSalesAccounts」' , 分別。請注意前面的反斜槓以確保命名空間是正確的。 – sjagr

+0

@sjagr,它不起作用,所有對實體的引用都可以正常工作,而不需要這個斜槓 – Averias

+0

考慮將* @ORM \ Entity()添加到您的聯盟實體。 – Cerad

回答

0

好吧,我解決了這個問題。首先,對不起打擾你,因爲它是一個愚蠢的愚蠢的心不在焉......由於我們使用Redis的緩存主義(與sncRedisBundle),特別是元數據和查詢,加盟實體在Redis的,但沒有新的字段聲明「affiliateSalesAccounts」緩存。刪除存儲附屬實體問題解決的關鍵之後。

感謝這麼多的意見

0

我不知道你的問題,但我發現我做一個不同的方式,我只是讓這裏的代碼,這樣你就可以檢查它

/** 
* @ORM\OneToOne(targetEntity="Profile", mappedBy="user", cascade={"remove"}) 
**/ 
private $profile; 

其他類:

/** 
* @var \Lifecrops\LCUserBundle\Entity\User 
* 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="NONE") 
* @ORM\OneToOne(targetEntity="Lifecrops\LCUserBundle\Entity\User", inversedBy="profile") 
* @ORM\JoinColumns({ 
* @ORM\JoinColumn(name="User_id", referencedColumnName="id") 
* }) 
*/ 
private $user; 
0

Ussually我做這樣的事情:

namespace HO\CisBundle\Entity; 

use HO\HasoffersBundle\Entity\Affiliate; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Table(name="AffiliateSalesAccounts") 
* @ORM\Entity() 
*/ 
class AffiliateSalesAccounts { 

    /** 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    * 
    */ 
    private $id; 

    /** 
    * @ORM\OneToOne(targetEntity="Affiliate", inversedBy="affiliateSalesAccounts") 
    * @ORM\JoinColumn(name="affiliate_id", referencedColumnName="id") 
    * 
    */ 
    private $affiliate; 

    /** 
    * @param Affiliate $affiliate 
    */ 
    public function setAffiliate(Affiliate $affiliate) 
    { 
     $this->affiliate = $affiliate; 
    } 

    /** 
    * @return Affiliate 
    */ 
    public function getAffiliate() 
    { 
     return $this->affiliate; 
    } 
} 

而第二個實體:

namespace HO\HasoffersBundle\Entity; 

use HO\CisBundle\Entity\AffiliateSalesAccounts; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Table(name="ho_Affiliate") 
* @ORM\Entity() 
*/ 
class Affiliate 
{ 


    /** 
    * @ORM\OneToOne(targetEntity="AffiliateSalesAccounts", mappedBy="affiliate") 
    */ 
    private $affiliateSalesAccounts; 

    /** 
    * @param AffiliateSalesAccounts $affiliateSalesAccounts 
    */ 
    public function setAffiliateSalesAccounts($affiliateSalesAccounts) 
    { 
     $this->affiliateSalesAccounts = $affiliateSalesAccounts; 
    } 

    /** 
    * @return AffiliateSalesAccounts 
    */ 
    public function getAffiliateSalesAccounts() 
    { 
     return $this->affiliateSalesAccounts; 
    } 

} 

清除緩存imortant一部分,如果一切順利的不好你可以看一下:

doctrine: 
    orm: 
    auto_mapping: true