I am using Laravel 5.4.
service.php
$results = Coupon::select(...self::SELECTED_FIELDS)->with('user:id,email');
$results = $results
->orderBy('created_at', 'DESC')
->limit($limit)
->offset($offset)
->get()
// Apparently you need to hide the computed fields manually in Laravel?
->each(function($row){
$row->setHidden(
'coupons',
'coupons_count',
'coupon_ids_string',
'assigned_coupon_ids',
'used_coupon_ids'
);
});
The model codes:
protected $appends = [
'coupons',
'coupons_count',
'coupon_ids_string',
'assigned_coupon_ids',
'used_coupon_ids'
];
function getCouponIDsStringAttribute() {
echo('Hahaha');
// ... A lot of thing happened here, accessing database, do joins
}
function getCouponsAttribute() {
echo('Hahaha');
// ... A lot of thing happened here, accessing database, do joins
}
function getCouponsCountAttribute() {
echo('Hahaha');
// ... A lot of thing happened here, accessing database, do joins
}
function getAssignedCouponIDsAttribute() {
echo('Hahaha');
// ... A lot of thing happened here, accessing database, do joins
}
function getUsedCouponIDsAttribute() {
echo('Hahaha');
// ... A lot of thing happened here, accessing database, do joins
}
When the codes above executed, the result of $results
will execute all the appended fields's function. Output in the browser:
HahahaHahahaHahahaHahahaHahaha
I only want the appended fields to be calculated when I accessed to. I don't need to have the appended fields to be calculated for every time I ask for Coupon
. How can I achieve this? Thanks!
via Chebli Mohamed
Aucun commentaire:
Enregistrer un commentaire