我想从数据库中的表中追加数据计数,但是关系方面存在问题。
我有3个型号
优惠券模型:
VoucherSerial模型:
每个优惠券都会有很多序列号
UserVoucher模型:
当用户兑换凭证时,它将存储在user_vouchers表中。我还定义了所有模型的关系
在Voucher.php中,我想添加用户兑换的凭证的数量。
public function getVoucherRedeemedAttribute()
{
//query to append the voucher redeemed count for each voucher
}
我尝试了很多解决方案,但大多数情况下我都遇到了错误。我最大的问题是因为要根据user_vouches表对每个凭证兑换的凭证进行计数,但是每个凭证都有很多我要计为同一凭证的serial_id
我知道我对这个问题的解释不好,但是我需要一些帮助。希望有人能帮助我。
非常感谢您
答案 0 :(得分:1)
您可以使用withCount
方法向结果中添加相关对象的数量:
如果您要计算没有关系的关系的结果数 实际加载它们时,您可以使用withCount方法,该方法将 在生成的模型上放置一个{relation} _count列。例如:
$posts = App\Post::withCount('comments')->get(); foreach ($posts as $post) { echo $post->comments_count; }
来源:https://laravel.com/docs/5.8/eloquent-relationships#counting-related-models
如果我正确理解了您的问题,则希望将计数加深一级(凭证数量而不是凭证序列号)。您也许可以使用hasManyThrough
关系:
“具有多次通过”关系为通过中间关系访问远处的关系提供了方便的快捷方式。例如,一个国家(地区)模型可能通过一个中间用户模型具有许多邮政模型。在此示例中,您可以轻松地收集给定国家/地区的所有博客文章。
来源:https://laravel.com/docs/5.8/eloquent-relationships#has-many-through
结合起来,它将看起来像这样:
class User {
//...
public function vouchers()
{
return $this->hasManyThrough(App\Voucher::class, App\VoucherSerial::class);
}
}
// Controller
$user->withCount('vouchers');
我从未真正一起使用过withCount
和hasManyThrough
,但是应该可以使用;)