【问题标题】:Laravel Eloquent Getting Many To Many Relations Per Pivot Table Field ConditionLaravel Eloquent 根据数据透视表字段条件获取多对多关系
【发布时间】:2020-07-28 05:16:57
【问题描述】:

我对 Laravel 7 Eloquent 有疑问。我有 2 个由 many to many relation 加入的表。表用户通过pivot 表 PaymentModuleUser 连接到 PaymentModule。我需要在语句is_active = 1 的数据透视表上使用where。当我在我的模型中使用 toSQL() 时,SQL 返回了很好的结果,但是当我在 Controller 中检查我的 Eloquent Query 时,我恢复的数据忽略了我的 wherePivot 方法(从表中返回所有数据,忽略 is_active = 1 字段订阅者 = null 并让我这个用户.. 如果我的pivotWhere = null 不显示此用户,我必须这样做)。你能指出我的代码哪里出错了吗?

我的 UserTable 模型:

    public function subscriber(){
        return $this->belongsToMany(PaymentsModule::class, 'payment_module_user', 'user_id')->withPivot('is_active');
    }

我的控制器:

$users = User::with(['subscriber'=>function($query)
{
$query->wherePivot('is_active','=', 1);
}])->get();

print_r($users);

【问题讨论】:

  • 你的意思是返回所有用户吗?或返回所有订阅is_activite=0
  • 我的意思是返回订阅过期的用户。

标签: sql laravel eloquent pivot relationship


【解决方案1】:

在你的控制器中,尝试使用这个

$query->wherePivot('is_active', 1);

而不是,

$query->wherePivot('is_active','=', 1);

【讨论】:

    【解决方案2】:

    试试

    $users = User::with('subscriber' => function($query) {
        $query->where('payment_module_user.is_active', 1);
    })->get();
    
    print_r($users);
    

    数据透视表已经被 eloquent 加入,所以开始使用吧

    找到它here

    【讨论】:

      猜你喜欢
      • 2023-02-05
      • 2014-12-07
      • 1970-01-01
      • 2019-10-06
      • 1970-01-01
      • 2020-07-03
      • 1970-01-01
      • 1970-01-01
      • 2015-02-10
      相关资源
      最近更新 更多