不等于函数在下面的代码中不工作,当我通过Postman运行它时,但同样的查询在MySQL中给出输出。Laravel Eloquent代码-
Invoice::where('invoices.centre_code', $userInfo->centre_code)
->where("invoices.itemTotalPrice","<>", "invoices.paymentCollected") // this line is not working
->join('customers', 'customers.customer_code', '=', 'invoices.customerCode')
->join('items', 'items.id', '=', 'invoices.itemId')
->select('invoices.*', 'customers.customerName', 'customers.customerDialCode', 'customers.customerCity', 'customers.customerAddress', 'customers.customerMobile', 'items.itemName')
->whereBetween('invoices.created_at', [$from, $to])
->oldest("invoices.nextPaymentDate")
->get();
上面的代码返回了这个SQL查询,当我运行它时,MySQL cmd运行得很好。
select `invoices`.*, `customers`.`customerName`, `customers`.`customerDialCode`, `customers`.`customerCity`, `customers`.`customerAddress`, `customers`.`customerMobile`, `items`.`itemName` from `invoices` inner join `customers` on `customers`.`customer_code` = `invoices`.`customerCode` inner join `items` on `items`.`id` = `invoices`.`itemId` where `invoices`.`centre_code` = 705405 and `invoices`.`itemTotalPrice` <> invoices.paymentCollected and `invoices`.`created_at` between 2023-03-24 00:00:00 and 2023-03-24 23:59:59 order by `invoices`.`nextPaymentDate` asc
这段代码不工作->where("invoices.itemTotalPrice","<>", "invoices.paymentCollected")
我们期望的数据是invoices.itemTotalPrice!=invoices.paymentCollected,但是每当我们运行代码时,它都会获取给定日期内的所有数据。如果invoices.itemTotalPrice==invoices.paymentCollected,它应该排除这些行,但这不起作用。我们使用的是Laravel 10.0
3条答案
按热度按时间uajslkp61#
查看您粘贴在评论中的日志,我们可以看到
<>
被视为=
要简化问题,您可以用途:
qco9c6ql2#
使用
->whereColumn ('invoices.itemTotalPrice', '<>', 'invoices.paymentCollected')
比较列gj3fmq9x3#
where雄辩的帮助器接受一系列参数的数组。
参数序列可以是
1.色谱柱|值(相当于
column=value
1.色谱柱|经营者|值(相当于
column<operator>value
因此,在给定的有说服力的代码中,
invoices.paymentCollected
被计算为值如果你需要在连接上放置约束,请使用这里描述的语法
或者,如果列是同一个表的一部分,则可以使用自联接
也可以使用@Pippo提到的
whereColumn
语法