gpt4 book ai didi

Laravel Eloquent 'withCount' 在多个连接表上的函数

转载 作者:行者123 更新时间:2023-12-04 10:50:31 27 4
gpt4 key购买 nike

我有多个 hasMany 关系,我只想要最后一个表的行数。

用户可以在特定日期和时间注册研讨会,因此关系看起来像“Workshop”-> hasMany 'Date' -> hasMany 'TimeSlot' -> hasMany 'Registration'。

//Workshop Model
public function workshop_dates(){
return $this->hasMany(WorkshopDate::class);
}

//Date Model
public function workshops(){
return $this->belongsTo(Workshop::class);
}
public function workshop_times(){
return $this->hasMany(WorkshopTime::class);
}

//Time Model
public function workshop_dates(){
return $this->belongsTo(WorkshopDate::class);
}
public function registrations(){
return $this->hasMany(Registration::class);
}

//Registration Model
public function workshop_times(){
return $this->belongsTo(WorkshopTime::class, 'workshop_time_id','id');
}

在我的 Controller 中,我获取了所有相关日期和时间段的所有研讨会,但我不希望用户下载所有注册数据。我只希望他们下载每个时间段的注册数量。
我尝试使用 'withCount' 函数:
return Workshop::with('workshop_dates.workshop_times.registrations')->withCount('registrations')

但这给了我错误“调用未定义的方法 App\Workshop::registrations()”

所以我在 Workshop.php 中创建了这个方法,使用 extended version hasManyThrough:
public function registrations(){
return $this->hasManyDeep(Registration::class, [WorkshopDate::class,WorkshopTime::class]);
}

但是,现在我得到的是每个研讨会的注册总数,而不是每个时间段。

我是一个 Laravel 初学者,并且花了很多时间寻找解决方案。感谢所有帮助!

最佳答案

您可以添加 withCount()关于与这样的闭包的关系:

Workshop::with(['workshop_dates.workshop_times' => function($q) {
$q->withCount('registrations');
}, 'workshop_dates.workshop_times.registrations'])
->get()

否则,类似这种方法 https://stackoverflow.com/a/41166325/4705339

关于Laravel Eloquent 'withCount' 在多个连接表上的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59500647/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com