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