学说和类似查询

2022-08-30 09:04:07

我有教义的实体:

<?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;
}

我需要像这样进行查询:

select * from `orders` where `OrderEmail`='some@mail.com' and `Product` LIKE 'My Products%'

我尝试处理查询而不喜欢:

$em->getRepository("Orders")->findByEmailAndProduct($uname,$product);

但它犯了错误。为什么?是否可以在没有 DQL 的情况下执行此查询?我想让这个查询使用神奇的方法查找By**


答案 1

这对于神奇的查找方法是不可能的。尝试使用查询生成器

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

答案 2

您可以使用以下方法(直接在控制器中):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');

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

或者更好的是 - 为实体创建一个存储库类,并在其中创建一个方法 - 这将使它可重用


推荐