我正在制作一个Symfony的应用程序,我正在创建数据库和存储库。我需要进行查询,从表orders
中选择今天的日期(字段date
是datetime
),并且其中user
属性匹配search
变量或product
属性匹配search
变量。比赛也必须不区分大小写。简单地说 - 用户选择日期时间(今天,所有时间或最近7天)并键入字符串,我需要获取指定日期(今天,所有时间或最近7天)内的所有订单,以及订单中的product
包含search
或user
属性包含search
。以下是我迄今为止Symfony3 queryBuilder如何用OR搜索以及如何搜索子串?
$queryBuilder->
where('DATE_DIFF(orders.date, CURRENT_DATE()) = 0')->
andWhere("order.user LIKE '%search%'")->
setParameter('search',$search);
我必须符合两个user
和product
性质,我需要匹配字符串的一部分,而不是整个字符串。
例如,如果用户搜索mike
我需要匹配用户Mike Johnson
或产品mike
。
我曾考虑过使用orWhere
,但它只会匹配日期,即使其他两个搜索都是错误的。所以我用andWhere
,但现在我该如何添加第三个标准?我想过在addWhere
中加入OR。
我在这里看到很多答案,但其中大多数都很老。有些来自5年前。我不知道'DATE_DIFF'是否是正确的选择,或者LIKE
也是正确的选择。在使用Doctrine的Symfony中,我可以使用SELECT
进行简单的查询并将其写下。但是,我想使用queryBuilder的全部容量,并尽可能少地使用像LIKE
或'OR'(双关语)这样的关键字。
谢谢,我也想过这样做,但是有没有办法使用由queryBuilder提供的功能,可以从某些用途给我? –
用新的解决方案更新答案,但我认为对于你的情况更好的是第一个@ЛуциПетков –