1

Symfony2 プロジェクトのコントローラーから特定のカスタム エンティティ リポジトリ関数を呼び出す際に問題が発生しています。以前に他のエンティティで成功したことがあるので、おそらく何かが欠けている可能性があり、それが何であるかはわかりません.

リポジトリ クラスは次のようになります。

<?php

namespace OurSite\Bundle\OurBundle\Entity;
use Doctrine\ORM\EntityRepository;

class BlogRepository extends EntityRepository
{
    public function findPreviousPosts($limit = 6)
    {

        $q = $this->createQueryBuilder('q')
            ->where('q.category = :category')            
            ->setMaxResults($limit)                                                           
            ->add('orderBy', 'q.published ASC')
            ->getQuery();
        $res = $q->getResult();
        return $res;
    }
}

エンティティ:

<?php

namespace OurSite\Bundle\OurBundle\Entity;

use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;

/**
* OurSite\Bundle\OurBundle\Entity\Blog
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="OurSite\Bundle\OurBundle\Entity\BlogRepository")
*/
class Blog {
    // Non-relevant stuff here
}

このようにメソッドを呼び出すと:

$em = $this->getDoctrine()->getEntityManager();
$previousPosts = $em->getRepository('OurSiteOurBundle:Blog')->findPreviousPosts();

これを取得します:

Undefined method 'findPreviousPosts'. The method name must start with either findBy or findOneBy!

実行すると、期待どおりecho get_class($em->getRepository('OurSiteOurBundle:Blog'));に出力BlogRepositoryされます。

問題の原因は何ですか? プロジェクトには余分なbundleディレクトリがありますが、それが原因ではないのでしょうか?

4

5 に答える 5

3

私も同じ問題を抱えていました。私はそれについて多くの投稿を見てきましたが、何も解決していません。

最後に、以前に生成された yml ファイルを使用していたため、Doctrine がマッピングの注釈を読み取らなかったことが原因であることがわかりました。

したがって、yml/xml Doctrine ファイルがないことを確認してください。

その後 :

app/console doctrine:cache:clear-metadata
于 2013-07-23T14:27:31.443 に答える
3

このエラーが発生した場合:The method name must start with either findBy or findOneBy!カスタム リポジトリが読み込まれていないことを意味します。

コードのタイプミスをチェックし、キャッシュをクリアして、「OurSiteOurBundle」が実際のショートカット名であることを確認してください。

于 2012-11-27T07:43:37.840 に答える
0

マッピングに xml を使用する場合 (テストに合格): xml または yml マッピング ファイルを更新し、repository-class 属性を追加します。

<entity name="Ccd\Bundle\FrontendBundle\Entity\UvUpdatePageContent" table="uv_update_page_content" **repository-class="Ccd\Bundle\FrontendBundle\Entity\UvUpdatePageContentRepository"**>

http://doctrine-mongodb-odm.readthedocs.org/en/latest/cookbook/mapping-classes-to-orm-and-odm.html 次に、doctrine キャッシュを更新します。

php app/console doctrine:cache:clear-metadata

yml を使用します (テストされていません):

Acme\DemoBundle\Entity\Post:
  type: entity
  table: posts
  RepositoryClass: Acme\DemoBundle\Entity\PostRepository 
于 2014-05-02T18:47:47.800 に答える
0

以前にこのエンティティを使用しましたか? ブログの奇妙なエンティティ ショートカットが表示されます

OurSiteOurBundle:ブログ

しかし、あなたのブログには OurSite\ Bundle \OurBundle\Entity 名前空間があります。そうあるべきだと思う

OurSiteBundleOurBundle:ブログ

エンティティマネージャーは間違ったリポジトリクラスを指しています

于 2012-11-26T17:57:12.320 に答える