Fos 用户bundle和自定义实体之间的一对一 - 未找到映射



我想在fosuserbundle和我的Leed实体之间创建一个数据库关系。我通过make:实体创建了整个关系,并在数据库中轻松创建关系。我可以下载用户实体,leed和用户实体leed。

问题目前在两种情况下。无论是当我想简单地下载所有利兹还是如果我想由用户下载利兹时。

简单获取所有指示灯:

$leed = $this->getDoctrine()
->getRepository(Leed::class)
->find(1);

获取错误:

No mapping found for field 'leed' on class 'AppApplicationSonataUserBundleEntityUser'.

尝试通过用户:

$leed = $user->getLeed();

出现错误:

Return value of AppApplicationSonataUserBundleEntityUser::getLeed() must be an instance of AppEntityLeed, null returned

我的LEED实体:

<?php
namespace AppEntity;
use AppApplicationSonataUserBundleEntityUser;
use DoctrineORMMapping as ORM;
/**
* @ORMEntity(repositoryClass="AppRepositoryLeedRepository")
*/
class Leed
{
...
/**
* @ORMOneToOne(targetEntity="AppApplicationSonataUserBundleEntityUser", mappedBy="leed", cascade={"persist", "remove"})
*/
private $user;
public function getUser(): User
{
return $this->user;
}
public function setUser(User $user): self
{
$this->user = $user;
return $this;
}

我的用户实体:

<?php
namespace AppApplicationSonataUserBundleEntity;
//use FOSUserBundleModelUser as BaseUser;
//use SonataUserBundleEntityBaseUser as BaseUser;
use AppEntityLeed;
use SonataUserBundleEntityBaseUser as BaseUser;
use DoctrineORMMapping as ORM;
use SymfonyComponentValidatorConstraints as Assert;
use SymfonyBridgeDoctrineValidatorConstraintsUniqueEntity;
/**
* This file has been generated by the SonataEasyExtendsBundle.
*
* @link https://sonata-project.org/easy-extends
*
* References:
* @link http://www.doctrine-project.org/projects/orm/2.0/docs/reference/working-with-objects/en
*/
/**
* @ORMEntity
* @ORMTable(name="fos_user_user")
* @UniqueEntity(fields="company", message="Firma o tej nazwie już została zarejestrowana w systemie.")
*/
class User extends BaseUser
{
public function __construct()
{
parent::__construct();
$this->setRoles([]);
//        $this->username = 'empty';
//        $this->company = 'empty';
//        $this->city = 'empty';
//        $this->nip = 'empty';
//        $this->postcode = 'empty';
// your code here
}

...
/**
* @ORMOneToOne(targetEntity="AppEntityLeed", inversedBy="user", cascade={"persist", "remove"})
*/
private $leed;
public function getLeed(): Leed
{
return $this->leed;
}
public function setLeed(Leed $leed): self
{
$this->leed = $leed;
return $this;
}

此处为映射信息输出:

Found 20 mapped entities:
[OK]   AppApplicationSonataUserBundleEntityUser
[OK]   AppApplicationSonataUserBundleEntityGroup
[OK]   SonataUserBundleEntityBaseUser
[OK]   SonataUserBundleEntityBaseGroup
[OK]   SonataMediaBundleEntityBaseGallery
[OK]   SonataMediaBundleEntityBaseGalleryHasMedia
[OK]   SonataMediaBundleEntityBaseMedia
[OK]   AppApplicationSonataMediaBundleEntityMedia
[OK]   AppApplicationSonataMediaBundleEntityGallery
[OK]   AppApplicationSonataMediaBundleEntityGalleryHasMedia
[OK]   AppEntityMenu
[OK]   AppEntityTileLink
[OK]   AppEntityOrder
[OK]   AppEntitySubpage
[OK]   AppEntityMenuItem
[OK]   AppEntityLeed
[OK]   AppEntityNewsletterEmail
[OK]   AppEntityTest
[OK]   FOSUserBundleModelUser
[OK]   FOSUserBundleModelGroup

任何人都可以帮助我解决这个问题或理解错误吗?


好的,我像这样制作了用户实体:

/**
* @ORMOneToOne(targetEntity="AppEntityLeed", inversedBy="user", cascade={"persist", "remove"})
* @ORMJoinColumn(name="leed_id", referencedColumnName="id", nullable=true)
* @ORMId
*/
private $leed;
public function getLeed(): ?Leed
{
return $this->leed;
}
public function setLeed(?Leed $leed): self
{
$this->leed = $leed;
return $this;
}

如果我尝试,则没有错误:

$leed=$user->getLeed();

但这给了我一个空


另一种情况是如果我尝试这样做:

$leed = $this->getDoctrine()
->getRepository(Leed::class)
->find(1);

我收到错误:

Notice: Undefined index: leed

我做了这样的恩炎:

用户:

/**
* @ORMOneToOne(targetEntity="Leed", mappedBy="user")
*/
private $leed;
public function getLeed(): ?Leed
{
return $this->leed;
}
public function setLeed(?Leed $leed): self
{
$this->leed = $leed;
return $this;
}

和利德一样:

/**
* @ORMOneToOne(targetEntity="AppApplicationSonataUserBundleEntityUser", inversedBy="leed")
* @ORMJoinColumn(name="user_id", referencedColumnName="id", nullable=true)
*/
private $user;

用户实体:

/**
* @ORMOneToOne(targetEntity="Leed", mappedBy="user")
* @ORMJoinColumn(name="leed_id", nullable=true)
*/
private $leed;
/**
* @return mixed
*/
public function getLeed()
{
return $this->leed;
}
/**
* @param mixed $leed
*/
public function setLeed($leed): void
{
$this->leed = $leed;
}

和利德实体:

/**
* @ORMOneToOne(targetEntity="AppApplicationSonataUserBundleEntityUser", inversedBy="leed")
* @ORMJoinColumn(name="user_id", nullable=true)
*/
private $user;  

所以现在我有这样的配置:

实体用户:

/**
* @ORMOneToOne(targetEntity="Leed", mappedBy="user")
* @ORMJoinColumn(name="leed_id", nullable=true)
*/
private $leed;

实体利德:

/**
* @ORMOneToOne(targetEntity="AppApplicationSonataUserBundleEntityUser", inversedBy="leed")
* @ORMJoinColumn(name="user_id", nullable=true)
*/
private $user;

如果我尝试这样做:

$leed = $user->getLead(); 

我得到空结果, 如果我这样做:

$leed = $this->getDoctrine()
->getRepository(Leed::class)
->find(1);

我收到错误:

Notice: Undefined index: leed

这太疯狂了...

最新更新