学说和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);