首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >拉勒维尔:哪里->哪里->哪里查询。需要添加wherePivot

拉勒维尔:哪里->哪里->哪里查询。需要添加wherePivot
EN

Stack Overflow用户
提问于 2015-11-09 18:11:53
回答 3查看 11.2K关注 0票数 4

我正在从某个数据范围中选择所有的ScheduledPrograms,该数据范围具有属于特定UserAttendees。我想要添加一个筛选器,以只选择SchduledPrograms,其中枢轴字段registered=1

也就是说,我需要为多到多关系的scheduledPrograms->attendees添加一个scheduledPrograms->attendees。我该怎么做?我的思绪被所有的where条款搅乱了。

代码语言:javascript
运行
复制
$programs = ScheduledProgram::where('registration_start_date', '<=', $today)
              ->where('end_date', '>=',  $today)
              ->whereHas('attendees', function($q) use($user)
              {
                  $q->whereHas('user', function($q) use($user){
                      $q->where('id', $user->id);
                  });
               })->get();

模型

代码语言:javascript
运行
复制
Attendee->belongsTo('User')   
        ->belongsToMany('ScheduledPrograms')

User->hasMany('Attendee')

ScheduledProgram->belongsToMany('Attendee')

ScheduledProgram模型

代码语言:javascript
运行
复制
  public function attendees()
  {
    return $this->belongsToMany('Attendee', 'prog_bookings')->withPivot('registered','paid');
  }
EN

回答 3

Stack Overflow用户

发布于 2018-06-15 07:54:13

wherePivot()只能用于belongsToMany实例,但是whereHas()闭包函数接收Builder实例。

因此,您不能在wherePivot()内部使用whereHas()

票数 6
EN

Stack Overflow用户

发布于 2018-10-16 13:10:22

方法wherePivot用于模型实例,而不是模型查询生成器。

我认为当使用whereHas方法时,pivot表已经有了有力的连接,所以只是在whereHas方法中开始使用它--

代码语言:javascript
运行
复制
$programs = ScheduledProgram::where('registration_start_date', '<=', $today)
          ->where('end_date', '>=',  $today)
          ->whereHas('attendees', function($q) use($user)
          {
              $q
                  //========= See this: =========
                  ->where('prog_bookings.registered', '1')
                  ->whereHas('user', function($q) use($user){
                      $q->where('id', $user->id);
                  });
           })
           ->wherePivot('registered', 1)
           ->get();
票数 5
EN

Stack Overflow用户

发布于 2015-11-09 18:35:16

你试过什么吗?你犯了什么错误?

如果“已注册”字段位于ScheduledPrograms和Atendees关系之间的透视表中,则可以在get()之前添加where子句:

代码语言:javascript
运行
复制
$programs = ScheduledProgram::where('registration_start_date', '<=', $today)
          ->where('end_date', '>=',  $today)
          ->whereHas('attendees', function($q) use($user)
          {
              $q->whereHas('user', function($q) use($user){
                  $q->where('id', $user->id);
              });
           })
           ->wherePivot('registered', 1)
           ->get();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33615462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档