【问题标题】:entity repository in doctrine学说中的实体存储库
【发布时间】:2018-06-11 21:47:55
【问题描述】:

我在运行学说教程并尝试设置实体存储库时遇到问题。

// _src/entities/User.php
/**
 * @ORM\Entity(repositoryClass="UserRepository")
 * @Entity @Table(name="users")
 */
class User
{
    /**
 * @Id @GeneratedValue @Column(type="integer")
 * @var int
 */
protected $id;
/** @Column(type="string") */
protected $fname;
/** @Column(type="string") */
protected $lname;

public function getId()
{
    return $this->id;
}

public function getFname()
{
    return $this->fname;
}

public function setFname($fname)
{
    $this->fname = $fname;
}
public function getLname()
{
    return $this->lname;
}

public function setLname($lname)
{
    $this->lname = $lname;
}
}

然后我打电话给:

$users = $em->getRepository('User')->getUsersByLastName('user');
var_dump($users);

我的回购:

// _src/entities/UserRepository.php

use Doctrine\ORM\EntityRepository;

class UserRepository extends EntityRepository
{
    public function getUsersByLastName($lname)
    {
        $dql = "SELECT u FROM User u WHERE u.lname = ?1 ORDER BY b.created DESC";

        return $this->getEntityManager()->createQuery($dql)
        ->setParameter(1, $lname)
        ->getResult();
    }
}

我正在学习本教程,但不明白我缺少什么。任何帮助都将是惊人的。我正在努力快速学习这一点,不敢相信我已经遇到了这些问题。

这是我得到的错误:

PHP 致命错误:未捕获的 BadMethodCallException:未定义的方法“getUsersByLastName”。方法名称必须以 findBy 或 findOneBy 开头!在 /Users/ks/Documents/PHPStormProjects/dan/_vendor/doctrine/orm/lib/Doctrine/ORM/EntityRepository.php:226

堆栈跟踪:

#0 /Users/ks/Documents/PHPStormProjects/dan/test.php(27): Doctrine\ORM\EntityRepository->__call('getUsersByLastN...', Array)

#1 {主要} 在第 226 行抛出 /Users/ks/Documents/PHPStormProjects/dan/_vendor/doctrine/orm/lib/Doctrine/ORM/EntityRepository.php

【问题讨论】:

  • 请添加您遇到的任何错误。它有助于缩小问题范围,有经验的用户可能会通过查看错误消息来了解问题所在。这比通读所有代码试图找到未知错误要容易得多
  • 是的@JimL,不知道为什么我忘记了。编辑原始帖子以包含错误和堆栈。
  • 尝试清除元数据缓存
  • 我今天早上尝试清除所有缓存。 $cacheDriver = new \Doctrine\Common\Cache\MemcacheCache(); $deleted = $cacheDriver->deleteAll();我收到此错误:PHP 致命错误:未捕获的错误:在 /Users/ks/Documents/PHPStormProjects/dan/_vendor/doctrine/cache/lib/Doctrine/Common/Cache/MemcacheCache 中调用 null 上的成员函数 get()。 php:69 我不明白为什么这些问题有这么多。我正在按照他们在文档中所说的去做。

标签: php doctrine-orm orm


【解决方案1】:

我找到了答案。从字面上看,这是错误的。一旦我将方法更改为公共函数 findByLname($lname) 它就起作用了。我需要更仔细地查看文档。看起来很奇怪,你不能随意命名方法。

我仍然不确定清除缓存错误。我也认为正确地遵循了该文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 2013-10-11
    • 1970-01-01
    • 2011-07-18
    • 2011-02-10
    相关资源
    最近更新 更多