Mysql
 sql >> Database >  >> RDS >> Mysql

Riproduci il file BLOB dell'immagine del framework per l'oggetto di prova Yaml

Ho riscontrato lo stesso tipo di problema qualche tempo fa su un progetto. Tuttavia, poiché non riuscivo a trovare un modo per risolverlo con le fixture (poiché il database memorizza l'oggetto BLOB come una stringa come spiegato sopra da Pere), ho creato una soluzione alternativa per almeno risolvere questo problema in uno scenario di test-case. Ho creato il seguente file /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());
            }
        }
    }
}

La prima cosa che faccio è riempire il database con i dati iniziali se non ci sono "Elementi" già memorizzati nel database.
La seconda cosa è l'iterazione su tutti gli "Elementi" che giocano! appena memorizzati nel database, che vengono letti dal file "my_fixtures.yml". Qui per ogni elemento il campo della stringa verrà aggiornato come mostrato nell'esempio sopra.

So che questa non è esattamente la risposta alla domanda nell'OP, ma dà un'idea gentile per aggirare questo problema..

EDIT:nell'esempio sopra presumo che le immagini siano caricate manualmente nella cartella degli allegati come indicato nel tuo application.conf e che ogni nome di immagine è come:"item_" con estensione ".png"