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

Afspil Framework Image BLOB-fil til testobjekt Yaml

Jeg har oplevet samme slags problem for et stykke tid siden på et projekt. Men da jeg ikke kunne finde en måde at løse dette på med fixturerne (da databasen gemmer blob-objektet som en streng, som Pere forklarede ovenfor), lavede jeg en løsning for i det mindste at løse dette problem i et test-case-scenario. Jeg oprettede følgende fil /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());
            }
        }
    }
}

Den første ting, jeg gør, er at fylde databasen med indledende data, hvis der ikke allerede er nogen 'Item' gemt i databasen.
Den anden ting er at gentage alle de 'Item', der spiller! lige gemt i databasen, som læses fra filen "my_fixtures.yml". Her for hvert element vil strengfeltet blive opdateret som vist i eksemplet ovenfor.

Jeg ved, at dette ikke ligefrem er svaret på spørgsmålet i OP, men det giver en venlig idé at løse dette problem.

EDIT:I eksemplet ovenfor antager jeg, at billederne uploades manuelt til din vedhæftede mappe som angivet i din application.conf , og at hvert billednavn er som:"item_" med filtypen ".png"



  1. MySQL FEJL 1290 (HY000) --secure-file-priv mulighed

  2. MySQL - KONCAT to felter og brug dem i WHERE-klausulen

  3. SQLite - Opdater data

  4. MySQL INSERT INTO table VALUES.. vs INSERT INTO table SET