Cakephp 3.6 - Сохранение с использованием функции базы данных

Я пытаюсь сохранить файл в базе данных с помощью функции PostgreSQL (pgp_pub_encrypt_bytea) для шифрования файла.

Проблема в том, что функция анализируется как текст в результирующем запросе. Это массив данных:

$file_base64= base64_encode(file_get_contents($file['file']['tmp_name']));

$data = [
    'some_id' => $some_id,
    'name' => $file['file']['name'],
    'mime' => $file['file']['type'],
    'code'=> $code,
    'file' => "pgp_pub_encrypt_bytea(decode('$file_base64', 'base64'), dearmor('$pgp_public_key'))" 
];

Теперь в debug_kit это результирующий запрос:

INSERT INTO file_table (
  some_id, name, mime, code, file
) 
VALUES 
  (
    26, '1.png', 'image/png', '07e24948c82a2d7b758266d84e8464a23904cf90a78dfb', 
    'pgp_pub_encrypt_bytea(decode(''<-- HERE IS THE FILE IN BASE64 TEXT -->'', ''base64''), dearmor(''<-- HERE IS THE PGP KEY -->''))'
  ) RETURNING *

Итак, вы видите, что это строка, которая передается как текст:

'pgp_pub_encrypt_bytea(decode(''<-- HERE IS THE FILE IN BASE64 TEXT -->'', ''base64''), dearmor(''<-- HERE IS THE PGP KEY -->''))'

Но мне нужно выполнить это как функцию - как я могу это сделать?


РЕШЕНИЕ:

Мне удалось найти свой ответ, я зашел в документацию cakephp и внимательно прочитал «Использование функций SQL»:

https://book.cakephp.org/3.0/en/orm/query-builder.html#using-sql-functions

И изменил мой массив данных на это:

$data = [
    'some_id' => $some_id,
    'name' => $file['file']['name'],
    'mime' => $file['file']['type'],
    'code'=> $code,
    'file' => $table->query()->func()->pgp_pub_encrypt_bytea(["decode('$file_base64', 'base64'), dearmor('$pgp_public_key')" => 'literal']) 
];

$table->query()->func()->pgp_pub_encrypt_bytea()

Означает, что я хочу добавить в запрос функцию pgp_pub_encrypt_bytea.

Затем содержимое функции, которую мы хотим выполнить буквально:

["decode('$file_base64', 'base64'), dearmor('$pgp_public_key')" => 'literal']

Это устранило мою проблему = D

пожалуйста, переместите свое решение к собственному ответу, спасибо :)

Cœur 02.07.2018 19:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
58
0

Другие вопросы по теме