在 Symfony2 中使用 Doctrine 映射异常错误

Posted

技术标签:

【中文标题】在 Symfony2 中使用 Doctrine 映射异常错误【英文标题】:Mapping Exception error with Doctrine in Symfony2 【发布时间】:2015-10-12 09:17:30 【问题描述】:

我需要你的帮助,因为这就像我在 Symfony 2 中遇到映射问题的一天。

首先,我是 Symfony 的新手,我只有 2 周的时间练习该框架。 那么让我们谈谈我真正的问题。概要很简单,我有一个非常简单的表格,用于创建一个类别(CD/DVD/书籍等)。所以通常情况下,我的页面会显示所有已经存在的类别,然后我输入一个新类别(例如 BLU-RAY 代表 ie),然后该类别保存在我的名为 Categorie 的数据库中,并具有这些属性(idcategorie=BLU-RAY,idcatalogue=CAT01) .

这是正常情况,在我的情况下,我可以列出我所有的类别但是当我提交我的表单时,我有一个漂亮的

在链中找不到类“Doctrine\ORM\EntityRepository” 配置的命名空间 SEBO\BackOfficeBundle\Entity

首先这是我的控制器

public function categorieAction(Request $request)

    $categorie = $this->getDoctrine()
        ->getRepository('SEBOBackOfficeBundle:Categorie');
    $listeCategorie = $categorie->findAll();

    $newCategorie = new Categorie();
    $newCategorie->setIdcatalogue('CAT01');

    $form = $this->createFormBuilder($newCategorie)
        ->add('idcategorie', 'text')
        ->add('Ajouter', 'submit')
        ->getForm();

    $form->handleRequest($request);

    if ($form->isValid()) 
        $em = $this->getDoctrine()->getManager();
        $em->persist($categorie);
        $em->flush();

        $request->getSession()->getFlashBag()->add('notice', 'Catégorie bien enregistrée.');

        return $this->redirect($this->generateUrl('sebo_back_office_categorie', array(
            'listeCategorie' => $listeCategorie,
            'form' => $form->createView(),
        )));
    

    $content = $this->get('templating')->render('SEBOBackOfficeBundle:Advert:categorie.html.twig', array(
        'listeCategorie' => $listeCategorie,
        'form' => $form->createView()
    ));
    return new Response($content);

这是我的课程Categorie.php

namespace SEBO\BackOfficeBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
* Categorie
*
* @ORM\Table(name="categorie", indexes=@ORM\Index(name="FK_Catalogue_IdCatalogue", columns="IdCatalogue"))
* @ORM\Entity
*/
class Categorie

/**
 * @var string
 *
 * @ORM\Column(name="IdCategorie", type="string", length=40, nullable=false)
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="IDENTITY")
 */
private $idcategorie;

/**
 * @var \Catalogue
 *
 * @ORM\ManyToOne(targetEntity="Catalogue")
 * @ORM\JoinColumns(
 *   @ORM\JoinColumn(name="IdCatalogue", referencedColumnName="IdCatalogue")
 * )
 */
private $idcatalogue;



/**
 * Get idcategorie
 *
 * @return string 
 */
public function getIdcategorie()

    return $this->idcategorie;


/**
 * Set idcatalogue
 *
 * @param string $idcatalogue
 * @return Categorie
 */
public function setIdcatalogue($idcatalogue)

    $this->idcatalogue = $idcatalogue;

    return $this;


/**
 * Set idcategorie
 *
 * @param string $idcategorie
 * @return Categorie
 */
public function idcategorie($idcategorie)

    $this->idcategorie = $idcategorie;

    return $this;


/**
 * Get idcatalogue
 *
 * @return \SEBO\BackOfficeBundle\Entity\Catalogue 
 */
public function getIdcatalogue()

    return $this->idcatalogue;


这是我的类别的 Doctrine/ORM xml 文件。

<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
  <entity name="Categorie" table="categorie">
    <indexes>
      <index name="FK_Catalogue_IdCatalogue" columns="IdCatalogue"/>
    </indexes>
    <id name="idcategorie" type="string" column="IdCategorie" length="40">
      <generator strategy="IDENTITY"/>
    </id>
<many-to-one field="idcatalogue" target-entity="Catalogue">
  <join-columns>
    <join-column name="IdCatalogue" referenced-column-name="IdCatalogue"/>
  </join-columns>
</many-to-one>
 </entity>
</doctrine-mapping>

在我提交之前一切正常,我可以看到我的类别列表,但经过大量搜索后,我仍然看不到“Doc​​trine\ORM\EntityRepository”类是什么,我肯定错过了一个东西,我希望你能帮忙。 感谢您未来的回答。

【问题讨论】:

您是否在您的app/AppKernel.php 中注册了BackOfficeBundle 是的,我会这样做,否则我将无法访问我的网址或使用我的表单。 看起来你的一些实体扩展了EntityRepository 不,我检查了我的所有实体,但没有一个扩展EntityRepository 类。 【参考方案1】:

在你的实体中,你必须设置:

使用 Doctrine\ORM\EntityRepository;

这个页面上有一个例子:

Databases and Doctrine

【讨论】:

【参考方案2】:

好吧,也许是因为我累了,但我试图发送对象 $categorie 而不是我创建的新对象 $newCategorie

【讨论】:

以上是关于在 Symfony2 中使用 Doctrine 映射异常错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Symfony2 中使用 Doctrine DQL 时限制检索的记录数量

如何使用 Doctrine 在 Symfony2 中实现子查询?

Symfony2 / Doctrine2:不要在模式上删除全文索引:更新

Symfony2/Doctrine:如何使用 OneToMany 将实体重新保存为级联新行

Symfony2 - Doctrine - 在实体管理器刷新调用中捕获错误

使用 Doctrine 和 Symfony2 查询多对多关系