Olá colegas.
Eu precisei gravar uma imagem dentro de um campo blob, mas não encontrei exemplo de como fazer isso no adianti.
Segue a forma como resolvi.
Na classe active Record tive que fazer o seguinte:
Segue a forma como resolvi. Talvez não seja a melhor forma, mas pelo menos resolveu meu problema.
Caso algum colega saiba de uma melhor forma de resolver o problema, por gentileza coloque aqui.
A ideia é sempre usar um arquivo de imagem, antes de gravar no banco, ou até mesmo antes de renderizar na tela.
Esse arquivo fica numa pasta temporaria, e será apagado depois de certo tempo.
O unico incoveniente é que, toda vez que o registro é editado, um novo arquivo temporario é criado. Logo, a pasta "tmp" vai enchendo. Por isso que eu preciso apagar os arquivos temporarios. Se alguem tiver uma ideia melhor, posta aqui.
Na classe active Record tive que fazer o seguinte: Criei um campo virtual "imagem" que irá receber o caminho do arquivo temporario através de um metodo magico.
<?php
class MinhaClasse extends TRecord
?>
Na classe TPage de edição, onde a imagem será mostrada, eu resolvi usar um TImageCropper para pegar o campo virtual e mostrar na tela. Caso o usuario deseje selecionar outra imagem para ser gravada no banco, esse mesmo campo será usado para armazenar o local onde a imagem foi gravada.
<?php
class MinhaClasseForm extends TPage
parent::__construct();
...
...
// Aqui estou pegando informacao daquele metodo magico get_imagem
$img_brasao = new TImageCropper('imagem');
$img_brasao->setAllowedExtensions( [ 'png', 'jpg', 'jpeg'] );
$img_brasao->setSize(100, 200);
$nm = json_decode(urldecode($data->imagem));
$file = getcwd().'/tmp/'. basename( $nm->fileName );
$img = file_get_contents($file);
$object->imgcampo_brasao blob_do_banco= $img;
$object->store();