Search code examples
laraveleloquentlumen

Manual function inside query?


Is there any way to put a manual function inside a query in Laravel.

I've timestamp saved in string in DB. I want to convert timestamp from one timezone to another. All the timestamp is inserted in one time zone, and depending upon my user I fetch the timestamp and convert it into their timezone.

what I want to achieve is something like this..

$query = BlogCategory::select('merchant_id', userTime(added_at))              
                        ->where('site_id', $site_id)
                        ->get();

userTime() function takes two parameter, the timestamp and the timezone and converts the timsestamp to time of the user.

I want to use userTime() function before fetching the data. I dont want to fetch the data first and then do foreach and so on.

I know I might be absolutely absurd but is there anything of this sort in Laravel?


Solution

  • Well you can achieved that using collection map

    $query = BlogCategory::select('merchant_id', 'added_at')              
                            ->where('site_id', $site_id)
                            ->get();
    
    $dateAdded = $query->map(function ($data) {
        // try this if error $data['merchant_id']
        return array(
           'merchant_id' => $data->merchant_id,
           'added_at' => $this->userTime($data->added_at)
       );
    })
    
    dd($dateAdded);
    

    Read Collection documentation here: https://laravel.com/docs/5.8/collections