我更换了计算机并尝试将我的项目导入到新计算机。
我使用 Symfony(我的旧电脑上有 6 个,新电脑上有 7 个)。在导入所有数据之前,我使用 Doctrine 在本地重新创建数据库。在该项目中,一本书有作者和编辑。
为什么我会收到错误
"Key "0" in object with ArrayAccess of class "Doctrine\ORM\PersistentCollection" does not exist.
?
尽管它加载了所有数据,但作者集合是空的,对于编辑器,我有:
-lazyObjectState: Symfony\Component\VarExporter\Internal\LazyObjectState {#1038 ▼
+status: UNINITIALIZED_FULL
我的关系已映射。我的旧电脑上没有这个问题。
实体:
<?php
namespace App\Entity;
use App\Repository\LibrisRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: LibrisRepository::class)]
#[ORM\Table("exlibris")]
class Libris implements \JsonSerializable
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
[...]
#[ORM\ManyToOne(inversedBy: 'libris')]
#[ORM\JoinColumn(nullable: false)]
private ?Editeur $editeur = null;
#[ORM\ManyToMany(targetEntity: Auteur::class, inversedBy: 'libris')]
private Collection $auteurs;
#[ORM\Column(length: 100, nullable: true)]
private ?string $xl_img = null;
#[ORM\Column(length: 50)]
private ?string $xl_livre = null; /*nom du Libris*/
#[ORM\OneToMany(mappedBy: 'libris', targetEntity: BDConcern::class)]
private Collection $bdConcernes;
<?php
namespace App\Entity;
use App\Repository\AuteurRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: AuteurRepository::class)]
class Auteur implements \JsonSerializable
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 30)]
private ?string $nom = null;
#[ORM\Column(length: 30, nullable: true)]
private ?string $prenom = null;
#[ORM\ManyToMany(targetEntity: Libris::class, mappedBy: 'auteurs')]
private Collection $libris;
这里出现错误:
{% for l in listL %}
[...]
{{ l.auteurs[0].prenom }} {{ l.auteurs[0].nom }}</p>
[...]
{% endfor %}
Accueil控制器:
$listL = $libRepo->findAccRecent();
libRepo:
public function findAccRecent(): array
{
$etats = [1, 2];
return $this->createQueryBuilder('l')
->andWhere('l.xl_etat IN (:etat)')
->setParameter('etat', $etats)
->orderBy('l.xl_date', 'DESC')
->setMaxResults(18)
->getQuery()
->getResult();
}
发现问题在于没有在存储库中添加所有联接。不知道为什么它以前有效。