Laravel-计算where子句查询(口才)

时间:2018-09-25 08:23:40

标签: php laravel eloquent

我在laravel 5.2中工作,我在一个项目中,技术人员检查公司的工具,这些工具有期限,此期限是通过在验证日期中添加周期性来计算的。

餐桌工具

id |名称|子弹|周期性

TABLE INSPECTION_TOOLS

id | tool_id |检验日期

我需要所有工具都已过期 要知道截止日期,我们只需要将周期的月份添加到验证日期,然后检查是否大于今天。

我喜欢这个

我正在这样对模型Tool.php进行过滤查询:

    // Get date today
    $today = \Carbon\Carbon::today();

    $query->whereHas('inspection_tool', function ($query) use ($today,$filtri) {

        // Here i need add periodicity months to 'inspection_tools.inspection_date', but i don't know if we can do calculate inside query clauses.

        $query->where(('inspection_tools.inspection_date')->addMonths('tool.periodicity'),'<', $today);

        // I'm tryng like this but it doesn't work.


    });

2 个答案:

答案 0 :(得分:1)

可能的解决方案是,您可以从今天 减去“定期月份”,而不是在“检查日期”中添加“定期月份”。然后与“检查日期”进行比较

$query->whereHas('inspection_tool', function($query) use ($today, $filtry) {

    // substract 'periodicity months' from 'today'
    $verification_date = $today->subMonths('tool.periodicity');

    $query->where('inspection_tools.inspection_date' , '<', $verification_date);
});

答案 1 :(得分:0)

您可以使用\DB::raw()方法在字段中编写mysql语句

$query->whereHas('inspection_tool', function ($query) use ($today,$filtri) {

    $query->where(\DB::raw('(inspection_tools.inspection_date + inspection_tool.periodicity)'),'<', $today);

});