【问题标题】:Laravel relationship data with different tables nased on conditions基于条件不同表的Laravel关系数据
【发布时间】:2021-05-31 11:34:48
【问题描述】:

我正在处理 sn-p 但我必须检查另一个表如果该客户数据存在则返回数据如果就业表上不存在客户数据还返回基于前一个检查的数据然后忽略其余的但如果确实如此,我想使用指定的条件来检查并返回该数据。这是我尝试过的。

Customers::query()
            ->distinct('id')
            ->whereHas('quote')
            ->where(
                function ($query) {
                    $query->whereHas('profile', function ($query) {
                        $query->where(function ($query) {
                            $query->whereNull('nin')->WhereNull('bvn');
                        })->orWhere(function ($query) {
                            $query->whereNotNull('nin')->whereNotNull('bvn');
                        });
                    })->orWhereHas('employment', function ($query) {
                        $query->where(function ($query) {
                            $query->whereNull('bank_statement_url')->WhereNull('mono_account_statement_url');
                        })->orWhere(function ($query) {
                            $query->whereNotNull('bank_statement_url')->whereNotNull('mono_account_statement_url');
                        });
                    });
                }
            )->paginate(30);

【问题讨论】:

  • 是否有错误可以与我们分享,或者您能否向我们展示预期结果与实际结果?
  • @shaedrich 没有错误我只是得到混合数据。例如,我让一个有 nin 或 bvn 的人与没有的人一起
  • 这可能是因为您的orWhereHas() 适用于后一种情况。也许您必须使用 AND 而不是 OR,只需使用 ->whereHas() 而不是 orWhereHas()。这有帮助吗?
  • 感谢@shaedrich 这次没有工作它根本没有获取任何数据我已经查看了这个东西超过 2 天我仍然无法弄清楚错误或者是什么没有造成它带上正确的数据。

标签: php database laravel eloquent nested-queries


【解决方案1】:

我稍微清理了你的代码,并将你的 orWhereHas() 更改为 whereHas()

Customers::query()
    ->distinct('id')
    ->whereHas('quote')
    ->whereHas('profile', function ($query) {
        $query->where(function ($query) {
            $query->whereNull('nin')->WhereNull('bvn');
        })->orWhere(function ($query) {
            $query->whereNotNull('nin')->whereNotNull('bvn');
        });
    })->whereHas('employment', function ($query) {
        $query->where(function ($query) {  
            $query->whereNull('bank_statement_url')
            ->whereNull('mono_account_statement_url');
        })->orWhere(function ($query) {
            $query->whereNotNull('bank_statement_url')
            ->whereNotNull('mono_account_statement_url');
        });
    }
)->paginate(30);

【讨论】:

  • 非常感谢。我已经尝试过了,当我使用 and 时它返回零数据,但是在我使用 or 的地方我得到混合数据。
猜你喜欢
  • 2021-03-09
  • 1970-01-01
  • 2016-07-10
  • 2021-08-24
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
  • 2021-11-12
  • 2014-07-21
相关资源
最近更新 更多