Php 创建自定义存储库原则
我需要创建一个存储库,以便在表中找到指定的记录(名称)Php 创建自定义存储库原则,php,mysql,symfony,doctrine-orm,symfony-3.4,Php,Mysql,Symfony,Doctrine Orm,Symfony 3.4,我需要创建一个存储库,以便在表中找到指定的记录(名称) class CategoryRepository extends \Doctrine\ORM\EntityRepository { public function getAllByName($name) { return $this->getEntityManager()->createQuery('SELECT * FROM AppBundle\Entity\Category WHERE na
class CategoryRepository extends \Doctrine\ORM\EntityRepository
{
public function getAllByName($name)
{
return $this->getEntityManager()->createQuery('SELECT * FROM AppBundle\Entity\Category WHERE name LIKE "$name"');
}
}
我这样做了,但不幸的是,它不起作用。请告诉我,我该怎么做?
MySQL查询需要如下:
SELECT * FROM category WHERE name LIKE 'Your_Name'
您可能错过了对查询对象的getResult()方法的调用,例如:
/**
* @return Category[]
*/
public function getAllByName($name)
{
return $this->getEntityManager()->createQuery('SELECT * FROM AppBundle\Entity\Category WHERE name LIKE "$name"')->getResult();
}
一些信息
希望这有助于工作方法:
$result = $this->getDoctrine()->getRepository('AppBundle:Category')->findBy(array('name' => '$name'));
您必须使用
条令查询生成器
。
在方法getAllByName()
中添加以下代码:
$qb = $this->createQueryBuilder('c');
return $qb
->andWhere(
$qb->expr()->like('c.name', ':search'),
)
->setParameter('search', "%$search%")
->getQuery()
->getResult();
使用此方法,您可以使用
LIKE
在该查询中LIKE
没有任何意义。只需使用=
。但是如果您使用=
,您可以只使用$entities=$repo->findByName($name)
此外,FROM中的应该是实体类,而不是存储库。您可能在$name
值周围也缺少引号,但您还是应该使用参数,而不是将值连接到查询中。@JonStirling,类似这样的情况吗<代码>返回$this->getEntityManager()->createQuery('SELECT*FROM AppBundle\Entity\Category WHERE name=“$name”)代码>某种程度上,除了仍然没有使用参数。我的建议是不要用你自己的方法。如果您当前正在调用getAllByName
,只需调用findByName($name)
,它由条令的EntityRepository处理。@JonStirling写道:在存储库中找不到方法'findByName($name)'。。。