WHERE子句与Laravel中的另一个表有关系

马修

我的Laravel应用程序中有几张桌子,一个叫发运,另一个叫payments_distributions。

在我的货件中,我有称为pro_number和balance的列。

在我的payments_distributions中,有几列称为shipping_id和金额。

现在,我有一个控制器,其中包含这部分代码:

}elseif($_GET['paymentStatus']=="Unpaid"){
    if(empty($_GET['pro_number'])){
            $shipment = NULL;
        }else{
        $shipment = $_GET['pro_number'];
        }

        if($_GET['startDate']){
            $startDate = $_GET['startDate'];
        }
        if($_GET['endDate']){
            $endDate = $_GET['endDate'];
        }
                $start = $_GET['startDate'];
                $end = $_GET['endDate'];
                $status = $_GET['paymentStatus'];
    $date = \Carbon\Carbon::today()->subDays(0);

    $shipments = Shipment::sortable()
    ->where([
        ['due_date','<=',date($date)],
        ['pro_number', 'LIKE', '%' . $shipment . '%'],
        ['balance','>','SELECT SUM(payments_distributions.amount) FROM payments_distributions WHERE payments_distributions.shipment_id = pro_number'],
    ])
    ->whereBetween('date', [$startDate, $endDate])
    ->whereNotIn('shipment_billing_status', [2,3])
    ->paginate(25);
    return view('shipments.accounts', compact('shipments','start','end','status'));

}

现在,我的问题出现了,如果将以下代码放入MYSQL,它们会起作用:

SELECT SUM(payments_distributions.amount) FROM payments_distributions WHERE payments_distributions.shipment_id = 214050

将返回SUM(payments_distributions.amount):300.00

因此,如果您转到我的代码行,这是唯一行不通的事情,那么,如果可以的话,这行代码对所有人都正确吗?我只想说发货行中的余额字段必须大于payment_distributions表中的金额字段总和,其中payment_distributions表中的shipping_id字段等于发货表中的pro_number字段。

 ['balance','>','SELECT SUM(payments_distributions.amount) FROM payments_distributions WHERE payments_distributions.shipment_id = pro_number'],
    ]

更新(整个功能)

public function accountsQuery(){


if(($_GET['paymentStatus'] == "No Settle") or ($_GET['paymentStatus'] == "No Charge")){
            if($_GET['paymentStatus'] == "No Settle"){
                $status = 3;
            }elseif($_GET['paymentStatus'] == "No Charge"){
                $status = 2;
            }
                if(empty($_GET['pro_number'])){
                $shipment = NULL;
                }else{
                $shipment = $_GET['pro_number'];
                }

                if($_GET['startDate']){
                    $startDate = $_GET['startDate'];
                }
                if($_GET['endDate']){
                    $endDate = $_GET['endDate'];
                }
                        $start = $_GET['startDate'];
                        $end = $_GET['endDate'];
                        $status = $_GET['paymentStatus'];
                        $shipments = \App\Shipment::sortable()->where([ 
                            ['pro_number', 'LIKE', '%' . $shipment . '%'],
                            ['shipment_billing_status', 'LIKE', '%' . $status . '%'],
                        ])
                            ->whereBetween('date', [$startDate, $endDate])
                            ->paginate(25);
                return view('shipments.accounts', compact('shipments','start','end','status'));

}elseif($_GET['paymentStatus']=="Billed"){
    if(empty($_GET['pro_number'])){
            $shipment = NULL;
        }else{
        $shipment = $_GET['pro_number'];
        }

        if($_GET['startDate']){
            $startDate = $_GET['startDate'];
        }
        if($_GET['endDate']){
            $endDate = $_GET['endDate'];
        }
                $start = $_GET['startDate'];
                $end = $_GET['endDate'];
                $status = $_GET['paymentStatus'];
    $date = \Carbon\Carbon::today()->subDays(30);
    //AND TO MENTION WHERE SUM OF PAYMENTS TO THIS SHIPMENT < BALANCE DUE
    $shipments = Shipment::sortable()
    ->where([
        ['date','>=', date($date)],
        ['pro_number', 'LIKE', '%' . $shipment . '%'],
    ])
    ->whereBetween('date', [$startDate, $endDate])
    ->paginate(25);
    return view('shipments.accounts', compact('shipments','start','end','status'));

}elseif($_GET['paymentStatus']=="Unpaid"){
    if(empty($_GET['pro_number'])){
            $shipment = NULL;
        }else{
        $shipment = $_GET['pro_number'];
        }

        if($_GET['startDate']){
            $startDate = $_GET['startDate'];
        }
        if($_GET['endDate']){
            $endDate = $_GET['endDate'];
        }
                $start = $_GET['startDate'];
                $end = $_GET['endDate'];
                $status = $_GET['paymentStatus'];
    $date = \Carbon\Carbon::today()->subDays(0);

    $shipments = Shipment::sortable()
    ->where([
        ['due_date','<=',date($date)],
        ['pro_number', 'LIKE', '%' . $shipment . '%'],
    ])
    ->whereRaw('balance > SELECT SUM(p.amount) FROM payments_distributions p WHERE p.shipment_id = pro_number')
    ->whereBetween('date', [$startDate, $endDate])
    ->whereNotIn('shipment_billing_status', [2,3])
    ->paginate(25);
    return view('shipments.accounts', compact('shipments','start','end','status'));

}  
}
蒂姆·比格莱森(Tim Biegeleisen)

您应该能够将该子查询用作whereRaw表达式的一部分

->where([
    ['due_date','<=',date($date)],
    ['pro_number', 'LIKE', '%' . $shipment . '%']])
->whereRaw('balance > SELECT SUM(p.amount) FROM payments_distributions p WHERE p.shipment_id = pro_number')
->whereBetween('date', [$startDate, $endDate])
...

但是,我怀疑我们可能可以重写您的查询,以消除该WHERE子句中的相关子查询

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从另一个没有关系的表中设置属性Entity Framework

使用NOT IN的另一个表中的WHERE子句

使用 SSIS 中的另一个表更新一个表(具有关系)

如何在laravel的另一个表中获取数据where子句

从另一个没有关系的表中检索与一个表相关的数据

带有WHERE子句的SELECT,该子句以字符串形式存储在另一个表中

从一个表中选择与另一个表没有关系的表

在Where子句中添加另一个表

从表中选择where子句从另一个表中的数组

Laravel 5来自另一个表的where子句

如何显示与HTML中的另一个表的外键有关系的html文本框中的表的最后插入的ID(主键)

如何通过使用具有关系的另一个表中的数据(user_id)从用户表中检索用户名

Where子句检查另一个表中的两列

当where子句使用另一个表中的项目时,Mysqli Select查询

MySQL - 从另一个表中为 WHERE 子句选择数据

Left Join Where子句(名称与另一个表中的ID匹配)

Laravel流明另一个表的id关系

如何在Membership Asp.net MVC 4中进行编辑以制作具有关系的另一个表?

从关系laravel中的另一个表获取id

将数据从一个表插入到另一个没有关系的表的单列

HasManyThrough与Laravel 5.2中的另一个关系

如何根据 PowerBi 中另一个表中的 WHERE 子句添加具有自定义值的新列?

在where子句中将一个表中的日期与另一个表中的列一起使用

Sql从表中选择但使用另一个表值作为where子句

断言失败的UITableView:删除与另一个对象有关系的对象

如何使用另一个表中的 where 子句进行 select count(*) 返回空行?

Laravel Eloquent:通过具有多个关系的枢轴将表绑定到另一个表

我有一个表的 id 与另一个表的双重关系,我需要在另一个表中建立具有相同 id 的关系两次

如何添加具有引用laravel中另一个表的外键值的表?