Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 未找到异常id,转储显示isInitialized为false且所有属性为null的实体_Symfony_Doctrine_Symfony4 - Fatal编程技术网

Symfony 未找到异常id,转储显示isInitialized为false且所有属性为null的实体

Symfony 未找到异常id,转储显示isInitialized为false且所有属性为null的实体,symfony,doctrine,symfony4,Symfony,Doctrine,Symfony4,我得到了一个Cours(法语为lesson)实体,这个实体有一个“prof”属性,这个属性与prof(法语教师)实体有很多关系。这个Prof实体本身扩展了一个Eleve(student)实体(Prof是一个具有更多属性和方法的Eleve) 我创建了一个prof和一个带有fixture的cours,只是为了测试我的应用程序。然后,在CourseController中,我尝试将我的课程和教授信息发送到视图。为此,我加载我的课程,然后尝试通过我的课程访问我的教授 当我试图展示课程信息时,一切都很好。但

我得到了一个Cours(法语为lesson)实体,这个实体有一个“prof”属性,这个属性与prof(法语教师)实体有很多关系。这个Prof实体本身扩展了一个Eleve(student)实体(Prof是一个具有更多属性和方法的Eleve)

我创建了一个prof和一个带有fixture的cours,只是为了测试我的应用程序。然后,在CourseController中,我尝试将我的课程和教授信息发送到视图。为此,我加载我的课程,然后尝试通过我的课程访问我的教授

当我试图展示课程信息时,一切都很好。但当我试图接近教授时,一切都不起作用了。我得到一个错误,它告诉我id列不存在,当我尝试转储prof时,它告诉我isInitialized为false,每个属性都为null

我发现其他stackoverflow(或其他论坛)的主题也有类似的问题,人们解释说symfony进行延迟加载,而不会以更快的方式加载相关实体。但在我的案例中,所有提出的解决方案都不起作用或不是好的选择

解决方法之一似乎是在我的多人关系中,将吸引设置为渴望。但问题是prof本身有很多manytoone或manytomany或其他关系,这些实体中的每一个都必须允许访问相关的实体(因此也需要抓取),因此,每次我想要获取一个实体时,我都会加载整个数据库。我只想加载我所需要的,这将在每个控制器和每个方法中改变

提出的另一个解决方案是调用我的相关对象的一些方法(在这种情况下是prof),告诉doctrine我们需要访问它,这样doctrine就可以加载它。但此结果再次出现异常(未找到告诉id列)

课程控制员:

/**
 * @Route("/cours/{slug}", name="presentationCours")
 */
public function presentationCours(Cours $cours)
{
    $prof = $cours->getProf();
    // $prof->getLogin(); THIS result with exception

    dump($prof); // THIS shows all null values

    die();

    return $this->render('cours/presentation.html.twig', [
        "cours" => $cours,
        "prof" => $prof
    ]);
}
注意:如果您想知道我如何在不告诉symfony在哪里找到$cours var的情况下获得它,那么它可以在路径中找到它。它在symfony4中是新的(不确定它是新的,但我认为)。我确信它是有效的,我做了很多次,一个垃圾场($cours)非常有效

细枝文件:

{% extends 'base.html.twig' %}

{% block title %}{{ cours.nom }}{% endblock %}

{% block body %}

    <p>
        {{ cours.nom }}
    </p>
    <p>
        {{ cours.description }}
    </p>
    <p>
        {{ prof.login }} {# THIS result with exception #}
    </p>

{% endblock %}
{%extends'base.html.twig%}
{%block title%}{{cours.nom}{%endblock%}
{%block body%}

{{cours.nom}}

{{cours.description}}

{{prof.login}{{#此结果有例外#}

{%endblock%}
Eleve实体的一部分(prof:prof扩展Eleve的父实体)


请添加您的实体的相关部分!我编辑了我的文章。你的问题可能在于映射,看看这个答案:我使用的类表继承可能重复,它成功了!非常感谢。我编辑了我的第一条信息,向那些有同样问题的人解释我做了什么。
<?php
namespace App\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\EleveRepository")
 */
class Eleve
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $login;

    ...

}
<?php

namespace App\Entity;

use App\Entity\Eleve;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\ProfRepository")
 */
class Prof extends Eleve
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="text")
     */
    private $introduction;

    /**
     * @ORM\Column(type="text")
     */
    private $description;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Cours", mappedBy="prof")
     */
    private $cours;
<?php

namespace App\Entity;

use Cocur\Slugify\Slugify;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\Collection;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * @ORM\Entity(repositoryClass="App\Repository\CoursRepository")
 * @ORM\HasLifecycleCallbacks
 */
class Cours
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Prof", inversedBy="cours")
     * @ORM\JoinColumn(nullable=false)
     */
    private $prof;
<?php

namespace App\Entity;

use App\Entity\Prof;
use App\Entity\Eleve;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\Mapping\InheritanceType;
use Doctrine\ORM\Mapping\DiscriminatorMap;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping\DiscriminatorColumn;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * @ORM\Entity(repositoryClass="App\Repository\EleveRepository")
 * @InheritanceType("SINGLE_TABLE")
 * @DiscriminatorColumn(name="discr", type="string")
 * @DiscriminatorMap({"eleve" = "Eleve", "prof" = "Prof"})
 */
class Eleve
{