2011-11-16 23 views
31

Symfony2.I'de yeni bir komut sınıfı aracılığıyla bir varlık sınıfı oluşturduğumda bir depo sınıfı oluşturdum.Ama bu sınıftaki özel işlevlerime erişemedim. symfony2'de özel depo sınıfı nasıl oluşturulur? Bazı örnek kodlarla adım adım açıklamayı bana adım adım atabilecek biri var mı? Aşağıda Symfony2'deki özel depo sınıfı

ben

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

Ben herhangi bir hata var mı aşağıda hata var

$em = $this->getDoctrine()->getEntityManager(); 
      $pro = $em->getRepository('symBundle:Register') 
      ->findAllOrderedByName(); 

bu yol gibi benim denetleyicisi denilen

namespace Mypro\symBundle\Entity; 

use Doctrine\ORM\EntityRepository; 

/** 
* RegisterRepository 
* This class was generated by the Doctrine ORM. Add your own custom 
* repository methods below. 
*/ 
class RegisterRepository extends EntityRepository 
{ 


    public function findAllOrderedByName() 
    { 
     return $this->getEntityManager() 
      ->createQuery('SELECT p FROM symBundle:Register p ORDER BY p.name ASC') 
      ->getResult(); 
    } 


} 

benim depo sınıftır benim kod? Depo sınıfı oluştururken herhangi bir hata var mı? herhangi bir dersi kullanmam gerekti.

cevap

68

Bu depoyu sizin tarafınızdan kaydetmeyi unuttuğunuzu düşünüyorum. Sadece varlık yapılandırma dosyanızda depo sınıfını eklemelisiniz. src/MyPro/symBundle/Kaynaklar/config/doktrin olarak

/Register.orm.yml:

Mypro\symBundle\Entity\Register: 
    type: entity 
    repositoryClass: Mypro\symBundle\Entity\RegisterRepository 

ihtimale karşı, bu değişiklikten sonra önbelleği temizlemek unutmayın.

Ve (yerine yml config) Ek Açıklamalar daha sonra yerine yukarıda kullanıyorsanız, gibi bir şey ekleyin: manuel bir sahiptir Depoyu

+0

Reuven:

<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 Sonra önbellek güncellemek? bunu biliyor musun? –

+0

Ben netbean özel depo bilmek mümkün olduğunu sanmıyorum. Netbean'ın sürümüm, symfony özel kodunu otomatik olarak tamamlamıyor. – Reuven

+0

Ben aynı sorun var ve ben Symfony'de ile EntityRepository oluşturmak vermedi ... ama src/Projet/Bundle/Kaynaklar/config "doktrini" olarak adlandırılan herhangi bir klasör yok/... sorun ne? – httpete

6

kaydetmek için Varlık sınıfına

/** 
* @ORM\Entity(repositoryClass="Mypro\symBundle\Entity\RegisterRepository") 
*/ 

adım kılavuz güzel adım ... http://symfony.com/doc/current/book/doctrine.html#custom-repository-classes

  • İlk ek açıklamaları/yaml yapılandırmasında depo sınıfını tanımlamak
  • oluşturma işlevini sınıfını
  • oluştur
  • Sonra diyoruz yeni oluşturulan işlev .... Sen .. Sen tarafından sırasını ayarlayabilirsiniz bunu özel repo gerekmez tüm
+0

içine depo-class = "Lütfen \ Bundle \ Varlık \ ProductRepository" add Eğer @ORM \ Varlık (repositoryClass = "Acme \ StoreBundle \ Repository \ ProductRepository") 'den ek açıklama değiştirmediğiniz sürece manaul örnek @ORM \ Varlık' gibi bir şey için ', Symfony 2.1.1 ile çalışmıyor (repositoryClass =" Ayrıca sorunun ne yürütmeye çalışıyoruz son 2 saat geçirdikten sonra benim için çalıştı Varlık \ product.php Garip – yitwail

2

İlk EM getRepository findBy yönteminde fıkra: Ben konfigürasyonun bu pisliğe var

//$em - entity manager 
//from Doctrine documentation: findBy(criteria(array), order(array), limit, offset) 
$result = $em->getRepository('symBundle:Register')->findBy(array(), array('name' => 'ASC')) 
4

Ben de çok zaman kaybetti. Varlığımdaki depo sınıfını ek açıklama eşlemesi olarak yapılandırarak. Haritalama oradaydı, ancak yine de depo depoyla ilişkilendirilmemişti. Son satırına ek açıklama eşlemesini yani @ORM \ Varlık (repositoryClass = "Acme \ DemoBundle \ Entity \ UserRepository") taşındığında çalıştı.

/* 
* User 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="Acme\DemoBundle\Entity\UserRepository") 
*/ 
class User 
{ 
... 
}` 
+0

dosyası için ad, ile başlar Acme \ StoreBundle \ Varlık \ ProductRepository ")'. –

2

ben sadece yerli belgelere doc için takip ve ben seçilmiş açıklama arayın. Örneğin, yaml'i seçtim, Product.orm.yml ve Category.orm'a konfigürasyonlar ekledim.yml dosyaları da eklemek yeni php Varlık Yöntemlerine niteliklerini:

category.php için
protected $products; 

public function __construct() 
{ 
    $this->products = new ArrayCollection(); 
} 

ve product.php

için

protected $category; 

sonra php app/console doctrine:generate:entities Acme çalıştırın başarıyla yeni alıcılar ekleyebilir ve haritalama belirleyiciler

4

xml: klasör Kaynak/config/doktrininde Güncelleme xml eşleme dosyası, reklam d deposu sınıf özellik: Doğru çıktı var, ama benim Netbeans ide benim özel depo function.y algılayamadı

php app/console doctrine:cache:clear-metadata 
php app/console cache:clear