我正在尝试在Laravel 4中建立一个Artisan Cron Job,它可以让我们所有的订户都能使用Eloquent ORM付费。我正在努力实现这一点,我让所有用户订阅了至少一个月前最后一次付款的用户,或者根本没有付款的新订阅者。 然而,我只从用户表(用户1和3)获取信息,付款表的值为“空”'。这意味着他们不在范围内,但我只想要' null'如果他们在表格付款中没有任何值,则会显示值。
我的代码:
$Payments = user::leftJoin('payments', function ($query) {
$query->on ('payments.user_id', '=', 'user.id')
->where ('payments.paid_on', '<=',
date('Y-m-d H:i:s',mktime(0, 0, 0, date("m")-1, date("d"), date("Y"))))
->where ('payments.paid_on', '>=',
date('Y-m-d H:i:s',mktime(0, 0, 0, date("m")-1, date("d")-10, date("Y"))));
})
->where('user.start', '<', date('Y-m-d H:i:s',time()) )
->where('user.end', '>', date('Y-m-d H:i:s',time()) )
->get(['user.*','payments.paid_on']);
这是示例数据:
(user)
id start end
| 1 | 2014-02-24 00:00:00 | 2015-02-24 00:00:00 |
| 2 | 2012-03-24 00:00:00 | 2013-01-24 00:00:00 |
| 3 | 2014-03-24 00:00:00 | 2015-03-24 00:00:00 |
(payments)
user_id paid_on
| 1 | 2014-02-24 00:00:00 |
| 1 | 2014-03-24 00:00:00 |
| 2 | 2013-01-24 00:00:00 |
我希望它会出类似的东西:
| 1 | 2014-02-24 00:00:00 | 2015-02-24 00:00:00 | 1 | 2014-03-24 00:00:00 |
| 3 | 2014-03-24 00:00:00 | 2015-03-24 00:00:00 |
答案 0 :(得分:0)
我不知道我是否得出了正确的结论,但这就是我最终的结果。检查where子句中右表中是否存在值,如果没有检查是否存在NULL值。这是代码:
$Payments = user::leftJoin('payments', 'user.id', '=', 'payments.user_id')
->where('user.start', '<', date('Y-m-d H:i:s',time()) )
->where('user.end', '>', date('Y-m-d H:i:s',time()) )
->where (function($query)
{
$query->where ('payments.paid_on', '<=',
date('Y-m-d H:i:s',mktime(0, 0, 0, date("m")-1, date("d"), date("Y"))))
->where ('payments.paid_on', '>=',
date('Y-m-d H:i:s',mktime(0, 0, 0, date("m")-1, date("d")-5, date("Y"))))
->orWhere(function($orQuery)
{
$orQuery->whereNull ('payments.paid');
});
}
->get(['user.*','payments.paid_on']);