【问题标题】:Laravel filter relation's data by other relations dataLaravel 通过其他关系数据过滤关系数据
【发布时间】:2019-07-24 12:12:48
【问题描述】:

我正在尝试在即时加载查询中按其他关系的列 (results.draw_date) 过滤我的 tickets.tips.drawDates 关系的数据。有人对如何实现这一点有任何建议吗?

$products = Product::with([
        'results' => function ($query) use ($drawDates) {
            return $query->whereBetween('draw_date', $drawDates);
        },
        'tickets' => function ($query) use ($drawDateFrom) {
            return $query->whereDate('valid_until', '>=', $drawDateFrom)->where('status', 'pending');
        },
        'tickets.tips',
        'tickets.tips.drawDates' => function($query) {
            return $query->whereNull('status')->whereDate('draw_date', 'HERE SHOULD BE draw_date COLUMN FROM results RELATION');
        },
        'prizes'
    ])->get();

【问题讨论】:

    标签: laravel laravel-5 eloquent eager-loading


    【解决方案1】:

    您可以尝试使用whereColumn() 函数,它用于验证两列是否相等,如下所示:

    return $query->whereNull('status')->whereColumn('draw_date', 'results.draw_date');
    

    【讨论】:

    • 感谢您的回复!我试过这个,但没有运气。系统尝试将“results.draw_date”读取为原始列名,在这种情况下,我收到错误:未找到列。
    • 您必须调整我发布的代码以遵循您的 table.field 的命名。我不知道您的数据库结构,我的只是基于您发布的信息的一个示例。
    猜你喜欢
    • 2021-08-07
    • 1970-01-01
    • 2021-03-09
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2018-05-20
    相关资源
    最近更新 更多