laravel - Laravel eloquent 依赖 belongsTo id
问题描述
我有 2 张桌子subscribers
& subscriber_packages
。subscriber
我需要通过给定获取所选的当前活动包的计数subscriber_package / id
。
表:
# | subscriber_id | package_id | active
---------------------------------------
1 | 1 | 1 | true
2 | 1 | 2 | true
3 | 1 | 3 | true
4 | 1 | 4 | false
---------------------------------------
App\SubscriberPackage.php
class SubscriberPackage extends Model
{
public function subscriber()
{
return $this->belongsTo(Subscriber::class);
}
public function package()
{
return $this->belongsTo(Package::class);
}
public function _countActivePackages($subscriberPackage)
{
return self::where([
'id' => $subscriberPackage,
'status' => \Common::STATUS_ACTIVE,
])->whereHas('subscriber')->count();
}
}
解决方案
在您的订阅者处,您需要正确定义 HasManyThrough 关系,并且只需正确添加 where 原因以检查状态,即使在单独的方法中也是如此
public function packages()
{
return $this->hasManyThrough(Package::class, SubscriberPackage::class);
}
public function activePackages()
{
return $this->packages()
->where("subscriber_package.status", "=", "active");
}
之后,您可以随时使用它进行计数
$subscriber->activePackages()->count();
推荐阅读
- reactjs - GET http://localhost:8000/index.js net::ERR_ABORTED 404(未找到)
- c# - 使用私有构造函数对类进行单元测试
- c# - 如何将内容不同但结构相同的 JSON 字符串转换为 C# 对象?
- api - 通过 API 的 ReleasePayment 导致 PX.Data.PXActionDisabledException
- android - 如何检测已弃用的 androidx.legacy.widget.Space 类?
- python - 无法单独绘制箱线图
- c# - 错误:多个库的包名称为“com.facebook.android”
- java - 使用 Java 和 Ubuntu Docker 将一个文件从一个目录复制到另一个目录
- c++ - 创建一个假串行端口来模拟调制解调器
- concurrency - 带有 /p:BuildInParallel=true 和 /m 参数的 msbuild.exe 命令行 - 不同组合之间有什么区别?