【问题标题】:Couldn't use the whereNotExists clause correctly in Laravel 8 Eloquent无法在 Laravel 8 Eloquent 中正确使用 whereNotExists 子句
【发布时间】:2022-01-14 11:14:17
【问题描述】:

我有 2 个表,一个有不同的用户,第二个表是一个名为“factures”的发票表,有一个外键 userid,我称之为 client_id,我想得到的是 created_by 的客户数某个管理员并且还没有发票,这是我尝试过的:

$clients = User::select('id')
            ->where([['created_by',$membre_id],['role','Client']])
            ->orWhere([['updated_by',$membre_id],['role','Client']])
            ->whereNotExists(function($query)
              {
                  $query->select(DB::raw('client_id'))
                        ->from('factures')
                        ->where('created_by',$member_id);

              })->get();

但是这个查询给了我所有的客户 created_by $member_id 无一例外。 我的查询有什么问题?

【问题讨论】:

    标签: mysql laravel eloquent laravel-8 where-clause


    【解决方案1】:

    您是否尝试过以下操作:

    $clients = User::select('id')
        ->where(function($query) use($member_id){
            $query->where([['created_by',$membre_id],['role','Client']])
                ->orWhere([['updated_by',$membre_id],['role','Client']])
        })
        ->whereNotExists(function($query) use($member_id){
            $query->select(DB::raw('client_id'))
                ->from('factures')
                ->where('created_by',$member_id);
        })
        ->get();
    }
    

    此答案仅在前两个条件(created_by 和 updated_by)之间应用了 OR 条件,其结果是 AND 和第三个条件。

    【讨论】:

    • 它给了我以下错误:未定义的变量:membre_id,由于某种原因它无法识别我通过函数传递的参数:public function clientsSansFacture($membre_id){....}跨度>
    • 仍然无法识别:/:未定义变量:member_id
    • 现在再次检查。 $member_id 需要在两个闭包函数中使用
    • 感谢您的工作时间
    • 你对原始代码有什么改变?为什么原始代码不起作用?为您的答案添加一些解释以使其有用。
    猜你喜欢
    • 2016-11-29
    • 2017-10-27
    • 2018-07-11
    • 2021-12-01
    • 2015-03-26
    • 2018-12-18
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    相关资源
    最近更新 更多