Doctrine: custom entity repository-Collection of common programming errors
Have some problems with building custom entity repository.
I have the following fatal error while trying method of custom entity repository
Fatal error: Uncaught exception 'BadMethodCallException' with message 'Undefined method 'getByParentId'. The method name must start with either findBy or findOneBy!' in C:\Users\user\Desktop\projects\interview\application\libraries\Doctrine\ORM\EntityRepository.php:215 Stack trace: #0 C:\Users\user\Desktop\projects\interview\application\controllers\CommentController.php(58): Doctrine\ORM\EntityRepository->__call('getByParentId', Array) #1 C:\Users\user\Desktop\projects\interview\application\controllers\CommentController.php(58): Doctrine\ORM\EntityRepository->getByParentId('1') #2 [internal function]: CommentController->viewCommentsListByParentId('1') #3 C:\Users\user\Desktop\projects\interview\system\core\CodeIgniter.php(359): call_user_func_array(Array, Array) #4 C:\Users\user\Desktop\projects\interview\index.php(203): require_once('C:\Users\user\D...') #5 {main} thrown in C:\Users\user\Desktop\projects\interview\application\libraries\Doctrine\ORM\EntityRepository.php on line 215
My project structure is models Mappings Repositories Entities Proxies
My doctrine.php has repository loader like this
// load the repositories
$repositoryClassLoader = new \Doctrine\Common\ClassLoader('Repositories', APPPATH.'models');
$repositoryClassLoader->register();
My model class has the following declaration
namespace Entities;
use Doctrine\ORM\Mapping as ORM;
/**
* Entities\Comment
* @Entity (repositoryClass="Repositories\CommentRepository")
*/
class Comment
{
My Repository class has the following declaration
namespace Repositories;
use Doctrine\ORM\EntityRepository;
use Entities;
class CommentRepository extends EntityRepository {
public function getByParentId($parentid) {
return parent::findBy(array('parentid' => $parentid), array('creationdate' => 'DESC'));
}
}
Controller code calling for methods of custom repository
public function viewCommentsListByParentId($parentid) {
$data = array();
$data ['comment'] = $this->em->getRepository('Entities\Comment')->getByParentId($parentid);
$this->load->view('commentsList', $data);
}
What I’m doing wrong??? Please, help.
object(Doctrine\ORM\Mapping\ClassMetadata)#34 (32) { [“name”]=> string(16) “Entities\Comment” [“namespace”]=> string(8) “Entities” [“rootEntityName”]=> string(16) “Entities\Comment” [“customRepositoryClassName”]=> NULL [“isMappedSuperclass”]=> bool(false) [“parentClasses”]=> array(0) { } [“subClasses”]=> array(0) { } [“namedQueries”]=> array(0) { } [“identifier”]=> array(1) { [0]=> string(2) “id” } [“inheritanceType”]=> int(1) [“generatorType”]=> int(4) [“fieldMappings”]=> array(11) { [“id”]=> array(4) { [“fieldName”]=> string(2) “id” [“type”]=> string(7) “integer” [“id”]=> bool(true) [“columnName”]=> string(2) “id” } [“parentid”]=> array(4) { [“fieldName”]=> string(8) “parentid” [“type”]=> string(7) “integer” [“columnName”]=> string(8) “parentid” [“nullable”]=> bool(false) } [“isactive”]=> array(4) { [“fieldName”]=> string(8) “isactive” [“type”]=> string(7) “integer” [“columnName”]=> string(8) “isactive” [“nullable”]=> bool(false) } [“isremoved”]=> array(4) { [“fieldName”]=> string(9) “isremoved” [“type”]=> string(7) “integer” [“columnName”]=> string(9) “isremoved” [“nullable”]=> bool(false) } [“removaldate”]=> array(4) { [“fieldName”]=> string(11) “removaldate” [“type”]=> string(8) “datetime” [“columnName”]=> string(11) “removaldate” [“nullable”]=> bool(true) } [“user_name”]=> array(5) { [“fieldName”]=> string(9) “user_name” [“type”]=> string(6) “string” [“columnName”]=> string(9) “user_name” [“length”]=> int(255) [“nullable”]=> bool(false) } [“user_email”]=> array(5) { [“fieldName”]=> string(10) “user_email” [“type”]=> string(6) “string” [“columnName”]=> string(10) “user_email” [“length”]=> int(255) [“nullable”]=> bool(false) } [“user_avatar”]=> array(5) { [“fieldName”]=> string(11) “user_avatar” [“type”]=> string(6) “string” [“columnName”]=> string(11) “user_avatar” [“length”]=> int(255) [“nullable”]=> bool(false) } [“comment”]=> array(4) { [“fieldName”]=> string(7) “comment” [“type”]=> string(4) “text” [“columnName”]=> string(7) “comment” [“nullable”]=> bool(false) } [“creationdate”]=> array(4) { [“fieldName”]=> string(12) “creationdate” [“type”]=> string(8) “datetime” [“columnName”]=> string(12) “creationdate” [“nullable”]=> bool(false) } [“rating”]=> array(4) { [“fieldName”]=> string(6) “rating” [“type”]=> string(7) “integer” [“nullable”]=> bool(false) [“columnName”]=> string(6) “rating” } } [“fieldNames”]=> array(11) { [“id”]=> string(2) “id” [“parentid”]=> string(8) “parentid” [“isactive”]=> string(8) “isactive” [“isremoved”]=> string(9) “isremoved” [“removaldate”]=> string(11) “removaldate” [“user_name”]=> string(9) “user_name” [“user_email”]=> string(10) “user_email” [“user_avatar”]=> string(11) “user_avatar” [“comment”]=> string(7) “comment” [“creationdate”]=> string(12) “creationdate” [“rating”]=> string(6) “rating” } [“columnNames”]=> array(11) { [“id”]=> string(2) “id” [“parentid”]=> string(8) “parentid” [“isactive”]=> string(8) “isactive” [“isremoved”]=> string(9) “isremoved” [“removaldate”]=> string(11) “removaldate” [“user_name”]=> string(9) “user_name” [“user_email”]=> string(10) “user_email” [“user_avatar”]=> string(11) “user_avatar” [“comment”]=> string(7) “comment” [“creationdate”]=> string(12) “creationdate” [“rating”]=> string(6) “rating” } [“discriminatorValue”]=> NULL [“discriminatorMap”]=> array(0) { } [“discriminatorColumn”]=> NULL [“table”]=> array(1) { [“name”]=> string(7) “Comment” } [“lifecycleCallbacks”]=> array(0) { } [“associationMappings”]=> array(0) { } [“isIdentifierComposite”]=> bool(false) [“containsForeignIdentifier”]=> bool(false) [“idGenerator”]=> object(Doctrine\ORM\Id\IdentityGenerator)#40 (1) { [“_seqName”:”Doctrine\ORM\Id\IdentityGenerator”:private]=> NULL } [“sequenceGeneratorDefinition”]=> NULL [“tableGeneratorDefinition”]=> NULL [“changeTrackingPolicy”]=> int(1) [“isVersioned”]=> NULL [“versionField”]=> NULL [“reflClass”]=> object(ReflectionClass)#41 (1) { [“name”]=> string(16) “Entities\Comment” } [“isReadOnly”]=> bool(false) [“reflFields”]=> array(11) { [“id”]=> object(ReflectionProperty)#35 (2) { [“name”]=> string(2) “id” [“class”]=> string(16) “Entities\Comment” } [“parentid”]=> object(ReflectionProperty)#42 (2) { [“name”]=> string(8) “parentid” [“class”]=> string(16) “Entities\Comment” } [“isactive”]=> object(ReflectionProperty)#43 (2) { [“name”]=> string(8) “isactive” [“class”]=> string(16) “Entities\Comment” } [“isremoved”]=> object(ReflectionProperty)#44 (2) { [“name”]=> string(9) “isremoved” [“class”]=> string(16) “Entities\Comment” } [“removaldate”]=> object(ReflectionProperty)#45 (2) { [“name”]=> string(11) “removaldate” [“class”]=> string(16) “Entities\Comment” } [“user_name”]=> object(ReflectionProperty)#46 (2) { [“name”]=> string(9) “user_name” [“class”]=> string(16) “Entities\Comment” } [“user_email”]=> object(ReflectionProperty)#47 (2) { [“name”]=> string(10) “user_email” [“class”]=> string(16) “Entities\Comment” } [“user_avatar”]=> object(ReflectionProperty)#48 (2) { [“name”]=> string(11) “user_avatar” [“class”]=> string(16) “Entities\Comment” } [“comment”]=> object(ReflectionProperty)#49 (2) { [“name”]=> string(7) “comment” [“class”]=> string(16) “Entities\Comment” } [“creationdate”]=> object(ReflectionProperty)#50 (2) { [“name”]=> string(12) “creationdate” [“class”]=> string(16) “Entities\Comment” } [“rating”]=> object(ReflectionProperty)#51 (2) { [“name”]=> string(6) “rating” [“class”]=> string(16) “Entities\Comment” } } [“_prototype”:”Doctrine\ORM\Mapping\ClassMetadataInfo”:private]=> NULL }
-
You wrote
/** * Entities\Comment * @Entity (repositoryClass="Repositories\CommentRepository") */ class Comment {
There’s one space between
@Entity
and the parameters for that annotation: remove it.
Originally posted 2013-11-27 12:09:21.