我想在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
这太疯狂了...