Symfony2-条令无法执行自定义存储库

Symfony2-条令无法执行自定义存储库,symfony,doctrine-orm,doctrine,Symfony,Doctrine Orm,Doctrine,我找了很多答案,但似乎没有一个能帮我。基本上,当我尝试加载我的页面时,我得到了错误 未定义的方法“findTotalMatches”。方法名称必须以findBy或findOneBy开头 很明显,Symfony2/Doctrine没有找到我的自定义存储库类。我的包结构是这样的 Nick/AlertBundle/然后是我的所有其他目录 在我的实体类中,我有 <?php namespace Nick\AlertBundle\Entity; use Doctrine\ORM\Mapping a

我找了很多答案,但似乎没有一个能帮我。基本上,当我尝试加载我的页面时,我得到了错误

未定义的方法“findTotalMatches”。方法名称必须以findBy或findOneBy开头

很明显,Symfony2/Doctrine没有找到我的自定义存储库类。我的包结构是这样的 Nick/AlertBundle/然后是我的所有其他目录

在我的实体类中,我有

<?php

namespace Nick\AlertBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints\DateTime;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * AvailabilityAlert
 *
 * @ORM\Table(name="availability_alert")
 * @ORM\Entity(repositoryClass="Nick\AlertBundle\Repository\AvailabilityAlertRepository")
 *
 */
class AvailabilityAlert
{

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="search_command", type="string", length=256, nullable=false)
     */
    private $searchCommand;

    /**
     * @var string
     *
     * @ORM\Column(name="is_connecting", type="string", length=20, nullable=false)
     */
    private $isConnecting;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="last_updated", type="datetime", nullable=false)
     */
    private $lastUpdated;

    /**
     * @var boolean
     *
     * @ORM\Column(name="is_deleted", type="boolean", nullable=false)
     */
    private $isDeleted;

    /**
     * @var string
     *
     * @ORM\Column(name="alert_status", type="string", length=11, nullable=false)
     */
    private $alertStatus;

}
所以我所看到的一切看起来都是正确的,但是我仍然得到了开头提到的错误。我注意到一些答案提到了一些关于确保我没有使用yml的内容,但不确定如何检查这一点(我认为其他所有内容都使用了注释)

我是不是错过了一些明显的东西

这位于Resources/config/doctor/AvailabilityAlert.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="Nick\AlertBundle\Entity\AvailabilityAlert" table="availability_alert">
    <id name="id" type="integer" column="id">
      <generator strategy="IDENTITY"/>
    </id>
    <field name="searchCommand" type="string" column="search_command" length="256" nullable="false"/>
    <field name="isConnecting" type="string" column="is_connecting" length="20" nullable="false"/>
    <field name="lastUpdated" type="datetime" column="last_updated" nullable="false"/>
    <field name="isDeleted" type="boolean" column="is_deleted" nullable="false"/>
    <field name="alertStatus" type="string" column="alert_status" length="11" nullable="false"/>
  </entity>
</doctrine-mapping>


谢谢

这通常是因为您的捆绑包没有按照原则进行映射:

  • 运行命令
    php-app/console-doctrine:mapping:info
    ,确保您的包已映射
  • 如果未映射,只需将其添加到
    config.yml
    文件中:

     orm:
            default_entity_manager: default
            entity_managers:
                default:
                    connection: default
                    mappings:
                        NickAlertBundle:  ~
    
然后再次检查您的存储库

我在您的代码中观察到的其他内容是:
$userRepo=$this->getDoctrine()->getRepository('NickAlertBundle:AvailabilityAlert')

尝试在以下位置进行更改:
$userRepo=$this->getDoctrine()->getManager()->getRepository('NickAlertBundle:AvailabilityAlert')

我认为问题在于您对存储库的调用。您的捆绑包名为“AlertBundle”,而不是“NickAlertBundle”

尝试如下方式调用您的存储库:

$er = $this->getManager()->getRepository('AlertBundle:AvailabilityAlert');

我希望这有帮助

您是否在回购协议上测试了
findAll()
?它有用吗?另外,
$userRepo
上的get_类提供了什么?findAll()返回所有数据。但是如果我在我的定制repo中创建一个findAll函数,并且只返回一些随机文本,我仍然可以得到所有数据。所以它忽略了我的定制回购协议。Get类只返回字符串'Doctrine\ORM\EntityRepository'(长度=29)好的,那么你的repo不是由你的实体加载的(你应该有你的repo类名)你能给我们看完整的AvailabilityAlert实体吗?我已经用完整的AvailabilityAlert实体减去setter和getter更新了原始帖子。不,没关系!我真的不知道为什么没有加载注释,但您能否尝试添加以下对齐方式:
repository class=“Nick\AlertBundle\Entity\repository\availability alertrepository”
作为.orm.xml中
的属性?(cf:当您单击xml选项卡时)我从该命令中得到以下响应,找到了5个映射实体:[OK]Nick\AlertBundle\Entity\AvailabilityAlertBookingClass[OK]Nick\AlertBundle\Entity\AvailabilityAlertPseudos[OK]Nick\AlertBundle\Entity\AvailabilityAlertFlightNumber[OK]Nick\AlertBundle\Entity\AvailabilityAlertAvailabilityAlertAvailability可用性[确定]尼克\AlertBundle\Entity\AvailabilityAlert
 orm:
        default_entity_manager: default
        entity_managers:
            default:
                connection: default
                mappings:
                    NickAlertBundle:  ~
$er = $this->getManager()->getRepository('AlertBundle:AvailabilityAlert');