我的应用程序动态构建并运行复杂查询以生成报告.在某些情况下,我需要获得多个,有些任意的日期范围,所有其他参数都相同.
所以我的代码使用一堆连接,数组,排序,限制等来构建查询,然后运行查询.我当时想要做的是跳转到Builder对象并更改where子句,这些子句定义要查询的日期范围.
到目前为止,我已经做到了这样,以便在任何其他时间之前设置日期范围,然后尝试手动更改wheres数组的相关属性中的值.像这样;
$this->data_qry->wheres[0]['value'] = $new_from_date;
$this->data_qry->wheres[1]['value'] = $new_to_date;
Run Code Online (Sandbox Code Playgroud)
然后我做(已经做过一次)
$this->data_qry->get();
Run Code Online (Sandbox Code Playgroud)
虽然不起作用.查询只与原始日期范围一起运行.即使我的方式有效,我仍然不喜欢它,因为它似乎是以不稳定的依赖(某种耦合?)来拍摄的.即; 如果没有先设置日期,则它们全部崩溃.
我可以从头开始重新设置整个查询,只是使用不同的日期范围,但这看起来很糟糕,因为查询中的其他内容需要与上次使用时相同.
如何以正确/最好的方式实现这一点的任何想法都是非常受欢迎的.
谢谢,
杰夫
我的Laravel 5应用程序包含一个用于报告运行的动态查询构建器.我需要一些group by子句,并遇到了问题.如果我在那里使用实际的sql我可能会遇到问题,因为有时需要在sql中使用sql命令(而不是简单的列名),即 - DAYNAME(table_name.date_column).Laravel破坏了这个:
\`DAYNAME(table_name\`.\`date_column)\`
Run Code Online (Sandbox Code Playgroud)
对于我的查询的选择部分,我可以使用selectRaw,但似乎没有相似的group by.
我想过使用别名(所有的选择都是别名),但是Laravel也用"`"字符包装它们.此外 - 我的应用程序需要与MySQL和SQL Server一起使用,据我所知,后者不允许在查询的组中使用别名.
我可以在Illuminate\Database\Query\Grammars\Grammar中找到编译group by的方法(compileGroups),我想我可以覆盖它,但我不太清楚我会怎么做(已阅读Laravel文档) ).