【问题标题】:Counting Models related through manyToMany only if a pivot attribute null - Laravel仅当枢轴属性为空时才通过 manyToMany 计算相关模型 - Laravel
【发布时间】:2016-08-19 18:14:27
【问题描述】:

我正在详细说明这里获得的代码 ManyToMany relation - how update attribute in pivot table

我想要什么:

我想收集与任何每周Routine 相关的Activities 集合。数据透视表的属性 done_at 告诉我任何活动(任务)何时完成。

我可以在多对多关系中列出与父模型相关的->count() 活动:

public function activities()
{

    return $this->belongsToMany('App\Models\Activity', 'activity_routine', 'routine_id', 'activity_id')->withPivot('done_at')->withTimestamps();
}

现在我想要收集尚未完成的活动。他们有一个枢轴属性done_at 设置为null

我的尝试:

我希望下面的代码能正常工作。不幸的是,它没有。 我收到错误Illegal operator。当我把'!=' 替换为'=' 时,代码就像做梦一样工作,但它给了我已经完成的活动列表。

有什么提示吗?

public function activitiesOnlyDone()
{

    return $this->belongsToMany('App\Models\Activity')->withPivot('done_at')->wherePivot('done_at','!=',null);
}

其他提示: getting the value of an extra pivot table column laravel

【问题讨论】:

    标签: laravel eloquent pivot-table laravel-5.2 relation


    【解决方案1】:

    我相信在这种情况下,你可以替换

    ->wherePivot('done_at','!=',null);
    

    用一个简单的

    ->whereNull('done_at');
    

    如果其他表上有done_at 列,您将不得不这样做

    ->whereNull('activity_routine.done_at');
    

    这是因为 Relation 类使用 Laravel 的查询构建器来构建最终的数据库查询。并且任何未在 Relation 类中定义的关系上调用的方法都将通过 __call() 方法传递给查询构建器(Illuminate\Database\Query\Builder)。

    【讨论】:

    • 令我惊讶的是它确实有效。谢谢你。我还向 Laravel/Framework 提交了错误报告,因为 Illegal operator 错误是需要修复的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 2022-06-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多