2016-07-16 22 views
0

我只想显示那些没有当前月份的发票的实例,但可能存在较早的发票并且应该没有关系。仅显示当月没有发票的那些实例

我的目标是从根本上构建以下

SELECT * FROM 
instance 
WHERE 
1=1 
AND 
instance.active=true 
AND 
instance.id NOT IN 
(
    SELECT instance_id FROM invoice WHERE invoice_date='2016-07-01' 
) 

这是我想出了,它不能正常工作

$instances= Instance::where('active', '=', true)->with(['invoice' => function($query) { 
    $query->where('invoice_date', '!=',Carbon\Carbon::now()->format('Y-m-01')); 
    }])->get(); 
+0

愚蠢的问题..它不应该是'Carbon \ Carbon :: now() - > format('Ym-d')'? –

+0

'01'是第一天 - 我将所有的每月日期标记为01 :)对不起,我感到困惑 – Andrew

+0

对不起,现在我明白你要做什么了。你应该做的是获得本月的第一个月,并比较那个invoice_date小于那个日期。不是'!='因为那么你只说那一天,但是这个月的其余时间是可以的 –

回答

0

现在,这应该这样做

$instances= Instance::where('active', '=', true)->whereHas('invoice', function($query) { 
      return $query->where('invoice_date', '<', Carbon\Carbon::now()->format('Y-m').'-01'); 
    })->with('invoice')->get(); 
+0

如果他们有任何旧的发票,它仍然会显示实例;我不想在数据结构中有任何实例。如果存在实例ID,请不要显示实例ID号 – Andrew

+0

Okey ..虽然它打我了,它不应该是'return $ query-> where('invo ...' –

+0

而另一件事,你仍然会得到实例对象但没有关系,如果查询是错误的 –

相关问题