laravel 雄辩的 where 子句与枢轴

Posted

技术标签:

【中文标题】laravel 雄辩的 where 子句与枢轴【英文标题】:laravel eloquent where clause with pivot 【发布时间】:2018-05-19 07:07:19 【问题描述】:

我有如下三个表:

members
---------
id | tag | hasOn
1  |  1  |   1
2  |  2  |   1
3  |  3  |   0
4  |  1  |   1

tags
---------
id | title | date
1  |   a   |   05.12.2017 00:00:00
2  |   b   |   01.12.2017 00:00:00
3  |   c   |   12.11.2017 00:00:00
4  |   d   |   27.11.2017 00:00:00

并且有一个数据透视表

member_tag
-------------
member_id | tag_id | tagActive
    1     |    1   |    1
    1     |    2   |    1
    1     |    3   |    0
    1     |    4   |    1
    2     |    1   |    1
    2     |    2   |    1
    2     |    3   |    1
    2     |    4   |    1

这是我的代码(Auth::user 指成员模型)

Auth::user()->tags()->where('date', 'orWhere(function($q) $q->wherePivot('tagActive', 1); )->first();

它不工作。 我必须通过“date

我怎么能这样做? (查看在哪里拥有表列或在哪里透视表列)

【问题讨论】:

你得到什么错误? QueryBuilder::wherePivot 不存在 【参考方案1】:

尝试更改顺序,这样你就可以这样做了:

Auth::user()->tags()
    ->wherePivot('tagActive', 1)
    ->orWhere('date', '<', \Carbon\Carbon::now())
    ->first();

wherePivot 仅存在于 BelongsToMany 关系上。它在无范围的 QueryBuilder 上不存在,这就是您在带有闭包的 where 子句中得到的。

【讨论】:

->wherePivot 在 BelongsToMany 中不起作用

以上是关于laravel 雄辩的 where 子句与枢轴的主要内容,如果未能解决你的问题,请参考以下文章

在laravel中雄辩的where子句中连接两列

如何在 laravel 雄辩的关系中使用 where 子句

Laravel 雄辩的高级 where 子句:未定义的变量 |我使用 use()

如何使用父枢轴值作为条件获得雄辩的关系

使用 where 子句检索数据时,无论如何要检索计数 0 吗? (Laravel 雄辩)

Laravel 7 雄辩的嵌套条件,用于使用枢轴进行过滤