Php Laravel口若悬河,在哪里或哪里工作不好

Php Laravel口若悬河,在哪里或哪里工作不好,php,laravel,eloquent,Php,Laravel,Eloquent,我一直在用这些表创建连接,并急切地加载它们 交易(交易详细信息的父项) 事务详细信息(事务的子项和Mutasi_日志的父项) Mutasi_日志(事务详细信息的子项) 然后我添加了一些过滤器,例如: 仅显示我的数据(已登录用户创建的数据) 仅显示我的saldo 仅显示我的金额 我尝试过这个代码 blahlblah..... ->where('created_by',Auth::id()) ->orWhere('amount','LIKE','%'.$search.'%')

我一直在用这些表创建连接,并急切地加载它们

  • 交易(交易详细信息的父项
  • 事务详细信息(事务的子项和Mutasi_日志的父项)
  • Mutasi_日志(事务详细信息的子项)
  • 然后我添加了一些过滤器,例如:

  • 仅显示我的数据(已登录用户创建的数据)
  • 仅显示我的saldo
  • 仅显示我的金额
  • 我尝试过这个代码

    blahlblah.....
      ->where('created_by',Auth::id())
      ->orWhere('amount','LIKE','%'.$search.'%')
    
    ->orWhere('saldo','LIKE','%'.$search.'%'))

    但在这里,当填充搜索字段时,条件不正常(显示其他用户的数据,如我的saldo和amount)

    以下是输出:

    下面是我的完整代码:

    MutasiLog::with([
                     'transaction_detail.transaction',
                    ])
                    ->orWhereHas('transaction_detail', function (&$q) use ($search) {
                      $q->where('id', 'like', '%' . $search . '%');
    
                    $q->orWhereHas('transaction',function($q) use ($search){
                       $q->where('description','LIKE','%'.$search.'%');
                    });
          })
          ->where('created_by',Auth::id())
          ->orWhere('amount','LIKE','%'.$search.'%')
          ->orWhere('saldo','LIKE','%'.$search.'%')
          ->offset($start)
          ->limit($limit)
          ->orderBy($order,$dir)
          ->get();
    

    当使用orWhere并与其他where链接时,您的意思是:在我创建的位置或where amount(如搜索)获取数据,这就是为什么要获取所有数据的原因,因此解决方案应将搜索或where分组到单个位置,如下所示:

          ->where('created_by',Auth::id())
          ->where(function($query){
             $query->orWhere('amount','LIKE','%'.$search.'%')->orWhere('saldo','LIKE','%'.$search.'%')
    })
    
    在文档中,“您应该始终对orWhere调用进行分组,以避免在应用全局作用域时出现意外行为。”。你可以找到一个例子。
    所以你可以这样做:

    // blahlblah.....
    
            ->where(function ($query) use ($search) {
                $query->where('created_by',Auth::id())
                      ->orWhere('amount','LIKE','%'.$search.'%')
                      ->orWhere('saldo','LIKE','%'.$search.'%');
            })
            // ...
    
    或者,这取决于您的需要:

    // blahlblah.....
            ->where('created_by',Auth::id())
            ->where(function ($query) use ($search) {
                $query->where('amount','LIKE','%'.$search.'%')
                      ->orWhere('saldo','LIKE','%'.$search.'%');
            })
            // ...
    

    在文档中,“您应该始终对orWhere调用进行分组,以避免在应用全局作用域时出现意外行为。”。你可以找到一个解决的例子-谢谢你:D。。。你能回答你的意见吗?