我搜索过很多答案,但似乎没有一个能帮助我。基本上,当我尝试加载我的页面时,我收到错误
未定义的方法' findTotalMatches'。方法名称必须以findBy或findOneBy!
开头显然Symfony2 / Doctrine没有找到我的自定义存储库类。我的包结构是这样的 尼克/ 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;
}
所以它指向我的Repository目录中的AvailabilityAlertRepository。使用该命令生成此类由于某种原因没有工作(没有错误,只是没有创建类)所以我不得不手动创建它。我为测试目的而做的只是
<?php
namespace Nick\AlertBundle\Repository;
use Doctrine\ORM\EntityRepository;
class AvailabilityAlertRepository extends EntityRepository
{
public function findTotalMatches($keyword)
{
return 34;
}
}
然后在我的控制器中,我有
$keyword = "TEST";
$userRepo = $this->getDoctrine()->getRepository('NickAlertBundle:AvailabilityAlert');
var_dump($userRepo->findTotalMatches($keyword));
所以我能看到的一切看起来都是正确的,但是我仍然得到了开头提到的错误。我注意到一些答案提到了确保我没有使用yml,而不是确定如何检查这个(我已经使用了注释用于我认为的其他一切)。
所以我错过了一些明显的东西吗?
位于Resources / config / doctrine / 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>
由于
答案 0 :(得分:1)
通常这是因为你的包没有被学说映射:
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');
答案 1 :(得分:0)
我认为问题在于您对存储库的调用。您的捆绑包名为&#39; AlertBundle&#39;不是&#39; NickAlertBundle&#39;。
尝试像这样调用您的存储库:
$er = $this->getManager()->getRepository('AlertBundle:AvailabilityAlert');
我希望这有帮助!