Doctrine和LIKE查询

Eug*_*ene 55 php mysql doctrine-orm

我有Doctrine的实体:

<?php
/**
 * @Entity
 * @Table(name="orders")
 */
class Orders {
    /** @Id @Column(name="OID",type="integer") @GeneratedValue */
    private $id;
    /** @Column(name="Product",type="string")*/
        private $product;
    /** @Column(name="RegCode",type="string")*/
        private $reg_code;
    /** @Column(name="OrderEmail",type="string")*/
    private $email;
}
Run Code Online (Sandbox Code Playgroud)

我需要像这样进行查询:

select * from `orders` where `OrderEmail`='some@mail.com' and `Product` LIKE 'My Products%'
Run Code Online (Sandbox Code Playgroud)

我尝试处理查询没有像:

$em->getRepository("Orders")->findByEmailAndProduct($uname,$product);
Run Code Online (Sandbox Code Playgroud)

但它会犯错误.为什么?没有DQL我可以执行此查询吗?我想让这个查询使用魔术方法findBy**

Kri*_*van 138

魔术查找方法无法做到这一点.尝试使用查询构建器:

$result = $em->getRepository("Orders")->createQueryBuilder('o')
   ->where('o.OrderEmail = :email')
   ->andWhere('o.Product LIKE :product')
   ->setParameter('email', 'some@mail.com')
   ->setParameter('product', 'My Products%')
   ->getQuery()
   ->getResult();
Run Code Online (Sandbox Code Playgroud)


Man*_*eUK 22

您可以使用该createQuery方法(直接在控制器中):

$query = $em->createQuery("SELECT o FROM AcmeCodeBundle:Orders o WHERE o.OrderMail =  :ordermail and o.Product like :searchterm")
->setParameter('searchterm', '%'.$searchterm.'%')
->setParameter('ordermail', 'some@email.com');
Run Code Online (Sandbox Code Playgroud)

您需要更改AcmeCodeBundle以匹配您的包名称

甚至更好 - 为实体创建一个存储库类并在其中创建一个方法 - 这将使其可重用