微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Doctrine 防止数据库中不存在记录的 OneToOne 关联出错 客户端类状态等级:调用代码

如何解决Doctrine 防止数据库中不存在记录的 OneToOne 关联出错 客户端类状态等级:调用代码

问题

我正在尝试使用 Doctrine 在 Laravel 应用程序中创建 OnetoOne 关联。尝试访问关联时,我收到此错误

Entity of type 'Status' for IDs clientId(1) was not found

版本:

教义:2.7.5

Laravel:7.30.4


代码

客户端类

 <?PHP

namespace App\Client;

use App\Person\Person;
use Doctrine\ORM\Mapping as ORM;

/**
 * Class Client
 * @package App\Client
 *
 * @ORM\Entity(repositoryClass="ClientRepository")
 * @ORM\Table(name="client")
 */
class Client extends Person
{

    /**
     * @var Status
     *
     * @ORM\OnetoOne(targetEntity="Status",mappedBy="client")
     * @ORM\JoinColumn(name="id",referencedColumnName="client_id",nullable=true)
     */
    protected $status;


    /**
     * @return Status
     */
    public function getStatus()
    {
        return $this->status;
    }
}

状态等级:

<?PHP

namespace App\Client\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Class Status
 * @package App\Client\Entity
 *
 * @ORM\Entity(readOnly=true)
 * @ORM\Table(name="status_view")
 */
class Status
{
    /**
     * @var int
     *
     * @ORM\Id()
     * @ORM\Column(name="client_id",type="integer")
     */
    protected $clientId;

    /**
     * @var \App\Client\Client
     *
     * @ORM\OnetoOne(targetEntity="App\Client\Client",inversedBy="staus")
     * @ORM\JoinColumn(name="client_id",referencedColumnName="id",nullable=true)
     */
    protected $client;

    /**
     * @var string
     *
     * @ORM\Column(name="status",type="string")
     */
    protected $status;
    /**
     * @return string
     */
    public function getStatus()
    {
        return $this->status;
    }
}

调用代码

$client->getStatus()->getStatus()

我尝试过的/看过的答案


附加说明:

  • 这是对象在调用 spl_object_hash 时的样子,在下一次 UnitOfWork 调用出错之前。

    $client->getStatus()
  • 您可以看到它是一个 ->getStatus() 代理对象,它创建的不是“真实”对象,这就是它出错的原因(未找到 ID clientId(1) 的“状态”类型的实体)不使用 DoctrineProxies\__CG__\App\Client\Entity\Status {#2011 +__isInitialized__: false #clientId: 4 #client: null #status: null …2 } 时,因为急切加载了一个真正的对象。见here

  • Proxy 对象中下面的这段代码是导致上述错误的原因。这就是为什么我不能在父级('true' Client 类)中执行 fetch="EAGER" 的原因,因为它在调用父级之前出错。

    try catch

问题:

为什么 Client 没有按预期工作,我应该/可以做些什么来使它工作?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?