1

私は Symfony 2 と Doctrine の初心者で、簡単な問題があります:

私のリポジトリには非常に単純なコードがあります:

<?php

namespace BakeryIT\BakeryBundle\Entity;

use Doctrine\ORM\EntityRepository;

class ProjectRepository extends EntityRepository
{
    public function findHistory(){
        return $this->getEntityManager()
        ->createQueryBuilder()
        ->select('p')
        ->from('Project','p')
        ->getQuery()
        ->getResult();
    }
}

そして、コントローラーの 2 つの単純な関数:

<?php

namespace BakeryIT\BakeryBundle\Controller;

/*
...
*/

class ProjectController extends Controller
{
    public function indexAction()
    {
        return $this->index('Project', 'findHistory');
    }
}

コントローラーは次のようになります。

public function index($entity, $query = 'findAll')
{
    $repository = $this->getDoctrine()
        ->getRepository('BakeryBundle:'.$entity);

    $data = $repository->$query();

    return $this->render('BakeryBundle:'.$entity.':index.html.twig',
    array('data' => $data));
}

このコードはセマンティカル エラー[Semantical Error] line 0, col 14 near 'Project p': Error: Class 'Project' is not defined をスローします。

一方、リポジトリで次の行を変更すると、すべてが完全に機能します。

->from('Project','p')

->from('BakeryIT\BakeryBundle\Entity\Project','p')

この例が最初のケースで機能しない理由がわかりません。私の BakeryIT\BakeryBundle\Entity\Project の名前空間は次のように設定されています。

namespace BakeryIT\BakeryBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Project
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="BakeryIT\BakeryBundle\Entity\ProjectRepository")
 */
class Project
{
/*
..
*/
}
4

2 に答える 2

7

短い形式を使用するには、バンドル名も指定する必要があります。これは、ベンダーとバンドル名から構成されます。あなたの場合、それは次のようになります:

from('BakeryITBakeryBundle:Project')

バンドルの詳細については、次のリンクを参照してください。

http://symfony.com/doc/current/cookbook/bundles/best_practices.html

于 2013-09-22T02:41:43.710 に答える
0

ローカルシステムで使用できます

$entityManager->createQuery('DELETE FROM BellaShopBundle:cache c WHERE c.expires < :now')->setParameter('now', $date);

しかし、本番環境では、エンティティまたはクラス名を大文字にする必要がありました。これは、テーブル名として考えていたと思います。

$entityManager->createQuery('DELETE FROM BellaShopBundle:Cache c WHERE c.expires < :now')->setParameter('now', $date);
于 2014-03-05T14:34:09.467 に答える