如何在 Laravel 中的 hasMany 关系中使用 groupBy
how to use groupBy in hasMany relation in Laravel
我有 2 个 table 分别命名为 Resort 和 booking。在预订 table 中,有一个名为金额的字段。我想使用 hasMany 关系加入这些 tables 并使用 groupBy 获取预订 table 中金额字段的总和。你能帮我解决这个问题吗?
提前致谢
Laravel Eloquent 有自己的 withSum() 方法来避免“groupBy()”方法。
对于你的情况,你可以使用这样的东西(你可以根据你的需要进行修改):
// resorts with bookings and their summary prices
$data = Resort::select([
'id',
'name',
'image',
])
// ->orderBy('some_field', 'ASC')
->with(['bookings' => function($query) {
return $query->select([
'id',
'booking_id',
'price',
]);
}])
->withSum('bookings', 'price')
// ->where('resorts.some_field', '<=', 123)
->get();
// ->toArray();
但不要忘记在您的 parent(度假村)模型中定义适当的关系:
public function bookings() {
return $this->hasMany(Booking::class, 'resort_id', 'id');
}
您还需要在 child 的(预订)迁移中定义“resort_id”外键:
$table->unsignedTinyInteger('resort_id')->nullable();
$table->foreign('resort_id')->references('id')
->on('resorts'); // ->onUpdate('cascade')->onDelete('cascade');
我有 2 个 table 分别命名为 Resort 和 booking。在预订 table 中,有一个名为金额的字段。我想使用 hasMany 关系加入这些 tables 并使用 groupBy 获取预订 table 中金额字段的总和。你能帮我解决这个问题吗?
提前致谢
Laravel Eloquent 有自己的 withSum() 方法来避免“groupBy()”方法。
对于你的情况,你可以使用这样的东西(你可以根据你的需要进行修改):
// resorts with bookings and their summary prices
$data = Resort::select([
'id',
'name',
'image',
])
// ->orderBy('some_field', 'ASC')
->with(['bookings' => function($query) {
return $query->select([
'id',
'booking_id',
'price',
]);
}])
->withSum('bookings', 'price')
// ->where('resorts.some_field', '<=', 123)
->get();
// ->toArray();
但不要忘记在您的 parent(度假村)模型中定义适当的关系:
public function bookings() {
return $this->hasMany(Booking::class, 'resort_id', 'id');
}
您还需要在 child 的(预订)迁移中定义“resort_id”外键:
$table->unsignedTinyInteger('resort_id')->nullable();
$table->foreign('resort_id')->references('id')
->on('resorts'); // ->onUpdate('cascade')->onDelete('cascade');