Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Reproduzir arquivo BLOB de imagem do Framework para objeto de teste Yaml


Eu experimentei o mesmo tipo de problema há algum tempo em um projeto. No entanto, como não consegui encontrar uma maneira de resolver isso com os fixtures (já que o banco de dados armazena o objeto blob como uma string como Pere explicou acima), criei uma solução alternativa para pelo menos resolver esse problema em um cenário de caso de teste. Eu criei o seguinte arquivo /app/job/Bootstrap.java:
import play.test.*;
import play.jobs.*;
import play.db.DB;
import models.*;

import java.util.List;

@OnApplicationStart
public class Bootstrap extends Job {
     public void doJob() {
        // Load default data if the database is empty
        if(Item.count() == 0) {
            Fixtures.loadModels("my_fixtures.yml");
            List<Item> allItems = Item.findAll();
            for (Item a: allItems){
                DB.execute("UPDATE `Item` SET image='item_" + a.name.toLowerCase() + ".png|image/png' WHERE id=" + a.getId());
            }
        }
    }
}

A primeira coisa que faço é preencher o banco de dados com dados iniciais se não houver nenhum 'Item' já armazenado no banco de dados.
A segunda coisa é iterar sobre todos os 'Item' que tocam! apenas armazenados no banco de dados, que são lidos do arquivo "my_fixtures.yml". Aqui, para cada item, o campo de string será atualizado conforme mostrado no exemplo acima.

Eu sei que essa não é exatamente a resposta para a pergunta no OP, mas dá uma boa ideia para contornar esse problema.

EDIT:No exemplo dado acima, suponho que as imagens sejam enviadas manualmente para sua pasta de anexos, conforme fornecido em seu application.conf , e que cada nome de imagem é como:"item_" com uma extensão ".png"