【问题标题】:How to get records using whereHas if child has no NULL value in Laravel如果孩子在 Laravel 中没有 NULL 值,如何使用 whereHas 获取记录
【发布时间】:2021-09-19 21:21:39
【问题描述】:

我正在使用 whereHas,我只想在子查询没有 NULL 时返回记录

return App\Bill_of_Lading::with('transactions.confirmed_transaction.delivery_order')
    ->whereHas('transactions.confirmed_transaction.delivery_order', function ($query) {
        $query->whereNotNull('date_delivered');
    })->get();

预期结果:NULL(因为有些交货单的 date_delivered 为 NULL) 结果:提单和空值交货单的集合

我也使用了 Laravel 的 "with" 没有成功

return App\Bill_of_Lading::with(['transactions.confirmed_transaction.delivery_order' => function($query){
        $query->whereNotNull('date_delivered');
    }])->get();

我什至将 whereNotNull 包裹在 where

return App\Bill_of_Lading::with('transactions.confirmed_transaction.delivery_order')
    ->whereHas('transactions.confirmed_transaction.delivery_order', function ($query) {
        $query->where(function($q){
            $q->whereNotNull('date_delivered');
        });
    })->get();

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

    你快到了,whereHas() 有额外的查询条件参数。所以检查关系是否有空字段并将其断言为0,因此交货单列不能为空。

    ->whereHas(
        'transactions.confirmed_transaction.delivery_order', function ($query) {
            $query->whereNull('date_delivered');
        },
        '=',
        0
    )
    

    【讨论】:

    • 感谢@mrhn!刚刚尝试过,但由于某种原因,我仍然得到相同的结果:提单的收集以及具有 NULL 值的交货单。我现在很困惑,因为我认为这应该可以解决我的问题。我想知道有什么问题。
    • 但是当我尝试制作它时:'<', 0 它总是返回 NULL。
    • 但它应该是'=',0,它是你输入的确切sn-p吗?
    • 是的,我尝试了'=', 0 并测试了'<', 0。我有一种预感,这不起作用,因为它是嵌套的。我尝试仅对交易使用相同的逻辑,并且效果很好。
    • 当你用 '=', 0 运行它时,你的结果是什么?有什么数据等等?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 2020-02-12
    • 2021-12-04
    • 2021-11-08
    • 2019-08-05
    • 1970-01-01
    相关资源
    最近更新 更多