ágil tutorial symfony2 instalar español descargar desarrollo con php symfony

php - tutorial - clase de repositorio personalizado en symfony2



symfony php descargar (6)

Creo que olvidaste registrar este repositorio en tu entidad. Solo tiene que agregar en el archivo de configuración de su entidad la clase de repositorio.

En src / Mypro / symBundle / Resources / config / doctrine / Register.orm.yml:

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

No olvide limpiar su caché después de este cambio, por las dudas.

Y si usa Anotaciones (en lugar de yml config), en lugar de lo anterior, agregue algo como:

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

a su clase Entidad para registrar el repositorio

Soy nuevo en Symfony2. Creé una clase de repositorio cuando creé una clase de entidad a través de la línea de comandos. Pero no pude acceder a mis funciones personalizadas en esa clase de repositorio. cómo crear una clase de repositorio personalizada en Symfony2? ¿Alguien puede darme una explicación paso a paso desde cero con algún código de muestra?

A continuación está mi clase de repositorio

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(); } }

Llamé a mi controlador de esta manera

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

Obtuve el siguiente error

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

¿Tengo algún error en mi código? ¿Algún error al crear una clase de repositorio? ¿Debo usar cualquier clase?



En primer lugar, no necesita un repositorio personalizado para hacer eso. Puede establecer la cláusula order by en el método EM getRepository findBy:

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


Simplemente sigo el documento de doc nativa y busco la anotación que seleccioné. Por ejemplo, seleccioné yaml, agregué configuraciones a los archivos Product.orm.yml y Category.orm.yml, también agregué nuevos atributos php a los métodos de la entidad:

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

para Category.php y

protected $category;

para Product.php

luego ejecute la php app/console doctrine:generate:entities Acme , que agregan nuevos getters y setters con éxito


Yo también perdí mucho tiempo cuando entré en este lío de configuración. Estaba configurando la clase de repositorio en mi Entidad como mapeo de anotación. El mapeo estaba allí pero aún así el repositorio no estaba asociado con la entidad. Cuando moví la asignación de anotación, es decir, @ORM / Entity (repositoryClass = "Acme / DemoBundle / Entity / UserRepository"), hasta la última línea, funcionó.

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


xml para mapeo: actualice el archivo de mapeo xml en la carpeta Recurso / config / doctrina, agregue el atributo de clase de repositorio:

<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 Luego actualiza la caché:

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