Modal: Assinatura.php
class Subscription extends Model {
use HasFactory;
public function payments(): HasMany {
return $this->hasMany(SubscriptionPayment::class, 'sub_id');
}
public function totalDurationDays(): Attribute {
return Attribute::make(
get: fn() => $this->payments()->sum('duration_days')
)->shouldCache();
}
}
Controlador: SubscriptionController.php
$subs = SharedServer::from('subscriptions AS ss')
->select(
'ss.*',
DB::raw("(SELECT SUM(duration_days) FROM subscription_payments AS ssp WHERE ssp.sub_id = ss.id) AS total_duration_days"),
)
->paginate();
Se total_duration_days
for invocado a partir do atributo personalizado, a barra de depuração do Laravel mostra muitas consultas em comparação com a invocação direta do controlador.
Existe uma maneira de instruir o construtor de consultas a carregar rapidamente total_duration_days
atributos personalizados diretamente em uma consulta?