我遇到的问题是我的查询中的where子句不受尊重。这是我正在使用的查询:
Capsule::table('tblhosting')
->select('*','tbldomains.nextduedate as domainnextduedate' , 'tblhosting.nextduedate as hostingnextduedate')
->join('tblclients', 'tblhosting.userid', '=', 'tblclients.id')
->join('tbldomains', 'tblhosting.domain', '=', 'tbldomains.domain')
->where('tblhosting.nextduedate', '!=', 'tbldomains.nextduedate')
->where('tbldomains.status', '=', 'Active')
->where('tblhosting.termination_date', '=', '0000-00-00')
->get()
如果我做vardump,我会得到这些值:
[56] => stdClass Object
(
[id] => 406
[userid] => 9
[orderid] => 730
[packageid] => 35
[server] => 9
[regdate] => 2016-12-23
[domain] => xxx.net
[paymentmethod] => banktransfer
[firstpaymentamount] => 0.00
[amount] => 0.00
[billingcycle] => Annually
[nextduedate] => 2017-12-23
[nextinvoicedate] => 2017-12-23
[termination_date] => 0000-00-00
[completed_date] => 0000-00-00
[domainstatus] => Active
[domainnextduedate] => 2017-12-23
[hostingnextduedate] => 2017-12-23
)
正如你所看到的,tbldomains.nextduedate和tbldomains.nextduedate都是'2017-12-23',所以它们不应该被退回,因为我使用
->where('tblhosting.nextduedate', '!=', 'tbldomains.nextduedate')
我认为这可能是因为我使用了别名,但是当我尝试
时->where('domainnextduedate', '!=', 'hostingnextduedate')
我收到了PDO错误:
Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'domainnextduedate' in 'where clause''
我不确定我错过了什么..
谢谢!
答案 0 :(得分:2)
您可以尝试使用此代码:
->whereColumn('tblhosting.nextduedate', '!=', 'tbldomains.nextduedate')
答案 1 :(得分:1)
问题在于不是认为右列是一列,而是将其解析为字符串,因此where的结果将被解析为2017-12-23 = tbldomains.nextduedate
。要解决此问题,您必须使用whereRaw
。
->whereRaw('tblhosting.nextduedate <> tbldomains.nextduedate')
修改强>
在Laravel中,您在处理查询中的日期时使用whereDate。因此,您的查询应如下所示:
->whereDate('tblhosting.nextduedate', '!=', 'tbldomains.nextduedate')