Laravel:将元数据的值转换为单独的布尔值

问题描述 投票:0回答:1

我正在为前端显示的一些请求制作一个语音日志对话控制器,我允许一些数据,并且需要排除一些数据

  public function index(): JsonResponse
    {
        $allowedMetadata = [
            'queue_display_name',
            'campaign_display_name',
            'finished',
            'transfer_destination',
            'direction',
            'record_expires',
            'cur_call_uid',
            'call_recording', //keep unexposed
            'has_recording // if call recording is true make this true, otherwise false
        ];

        request()->validate([
            'from'  => 'date_format:Y-m-d\TH:i:s\Z',
            'until' => 'date_format:Y-m-d\TH:i:s\Z',
        ]);

        $orderBy = request()->has('order_by') ? request('order_by') : "answered_at";
        $direction = request()->has('order_by') && request('direction') === "asc" ? "asc" : "desc";

//some request ordering code...

//some request query parsing code...

 
        $conversations = $query->paginate();
        foreach ($conversations as &$conversation) {
            foreach ($conversation->metadata as $key => $value) {
                if (!in_array($key, $allowedMetadata)) {
                    $conversation->metadata->forget($key);
                }
            }
        }
        return response()->json($conversations);
    }

在这种情况下,“call_recording”是一个我想保持不公开的 URL 字符串。我想将该值设为一个名为“has_recording”的布尔值,这样如果为 true,我可以在前端显示一个按钮,如果 has_recording 为 false,则不显示

如何向具有布尔值“has_recording”的 api 添加额外值,同时取消公开 call_recording url 字符串?

我想迭代所有对话并在 store() 函数中添加一个默认值“has_recording”,但我想将此值添加到元数据中

$reqHasCallRecording = false;
        foreach ($request->metadata as $metadataData) {
            if ($metadataData['key'] == 'call_recording') {
                $reqHasCallRecording = true;
                break;
            }
        }

我发现你可以用 Eloquent 来做到这一点,但不知道如何去做? 如有任何帮助,我们将不胜感激。

php laravel eloquent
1个回答
0
投票

我通过迭代每个对话并在有可用的校准记录时将新的元数据属性“有记录”设置为 true 来解决我的问题

    foreach ($conversations as &$conversation) {
        foreach ($conversation->metadata as $key => $value) {

            if ($key == 'call_recording') {
                $conversation->metadata['has_recording'] = isset($conversation->metadata['call_recording']);
            }
            if (!in_array($key, $allowedMetadata)) {
                $conversation->metadata->forget($key);
            }
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.