学说和LIKE查询

我有学说的实体:

<?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的情况下做这个查询吗 我想让这个查询使用魔术方法findBy **

这是不可能的魔术find方法。 尝试使用查询生成器 :

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

您可以使用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以匹配您的包名称

或者甚至更好 – 为实体创build一个存储库类,并在那里创build一个方法 – 这将使它可重用

这是不可能的魔术方法,但是你可以实现这个使用DQL( 学说查询语言 )。 在你的例子中,假设你有一个名为Orders with Product属性的实体,只要继续执行以下操作:

 $dql_query = $em->createQuery(" SELECT o FROM AcmeCodeBundle:Orders o WHERE o.OrderEmail = 'some@mail.com' AND o.Product LIKE 'My Products%' "); $orders = $dql_query->getResult(); 

应该做到你所需要的。

其实你只需要告诉学说谁是你的存储库类,如果你不这样做,学说使用默认的回购,而不是你的。

@ORM \实体(repositoryClass = “公司\ NameOfBundle \库\ NameOfRepository”)

你也可以这样做:

 $ver = $em->getRepository('GedDocumentBundle:version')->search($val); $tail = sizeof($ver);