Ручная функция внутри запроса? - PullRequest
0 голосов
/ 31 октября 2019

Есть ли способ поместить ручную функцию в запрос в Laravel.

Я сохранил метку времени в строке в БД. Я хочу преобразовать метку времени из одного часового пояса в другой. Все временные метки вставляются в одном часовом поясе, и в зависимости от моего пользователя я выбираю временную метку и преобразую ее в свой часовой пояс.

Что я хочу достичь, это что-то вроде этого ..

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

Функция userTime () принимает два параметра, отметку времени и часовой пояс и преобразует отметку времени в время пользователя.

Я хочу использовать функцию userTime () перед извлечением данных. Я не хочу сначала получать данные, а затем делать foreach и так далее.

Я знаю, что могу быть абсолютно абсурдным, но есть ли что-нибудь подобное в Laravel?

Ответы [ 2 ]

1 голос
/ 31 октября 2019

Что ж, вы можете достичь этого, используя карту коллекции

$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);

Прочитайте документацию коллекции здесь: https://laravel.com/docs/5.8/collections

0 голосов
/ 31 октября 2019

Вы должны использовать оператор selectRaw и позволить вашей БД выполнить эту логику за вас, если вы не хотите перебирать результирующий набор.

Например, если вашей базовой базой данных является MySQL, вы можете использоватьCONVERT_TIMEZONE функция и сделать что-то вроде этого.

BlogCategory::selectRaw('merchant_id, CONVERT_TZ(added_at, "GMT", "MET") as added_at')              
                    ->where('site_id', $site_id)
                    ->get();
...