2015-08-21 60 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