【问题标题】:Using orWherePivot brings non related models in Laravel在 Laravel 中使用 orWherePivot 带来了不相关的模型
【发布时间】:2021-03-28 16:31:52
【问题描述】:

我的公司有 30 个依赖项,每个用户都与一个依赖项相关联,但它们会不时移动,具体取决于合同类型,对依赖项的分配可以有固定日期或可以打开(null )。我使用数据透视表跟踪用户分配到的依赖项,该表存储dependency_id、user_id、分配给该依赖项的日期以及合同日期是否已知,或者他们何时从公司搬迁或退休,end_at 列获取一个日期值。

当我想知道用户有哪些依赖项时,我会使用

$user->dependencies;

但现在我想知道用户的活动依赖关系,所以我构建了这样的 getActiveDependency 方法:

$user->dependencies()
     ->wherePivot( 'ended_at', '>', \Carbon\Carbon::now()->format( 'Y-m-d' ) )
     ->orWherePivot( 'ended_at', null )
     ->first();

我解释我的查询: 第一行只是查询 hasMany 第二行将过滤所有有结束日期的,但它比现在大 第三行将在查询中添加 end 值为 null 的查询 最后一行只得到第一个结果,因为任何用户只能分配给一个依赖项,并且在给定时间任何用户只有一个依赖项处于活动状态。

当我使用第一行和第二行或第一行和第三行执行查询时,我得到了预期的结果,但是当我执行整个查询时,我得到了一个只分配给一个依赖项的用户的 495 个结果。

是否存在导致此问题的已知错误?

我是否使用了错误的查询?

谢谢

【问题讨论】:

    标签: laravel pivot-table relationship


    【解决方案1】:

    你可以试试参数分组

    $user->dependencies()
        ->where(function($query){
             $query->wherePivot( 'ended_at', '>', \Carbon\Carbon::now()->format( 'Y-m-d' ) )
                 ->orWherePivot( 'ended_at', null );
        })
         ->first();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-05
      • 1970-01-01
      • 2021-02-27
      • 1970-01-01
      • 2014-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多