2012-05-21 20 views
5

Me gustaría que RedBean cree claves/índices únicos al generar el esquema. El siguiente código no se opone a cómo entiendo la documentación: no haga esto:¿El ORM de RedBean puede crear claves únicas?

R :: setup ('sqlite: rss_loader.db3');

$bean = R::findOne(IMG); 
if (!$bean->id) { 
    $bean = R::dispense(IMG); 
    $bean->setMeta("buildcommand.unique.0", array('url')); 
    $bean->url  = 'text'; 
    R::store($bean); 
    $bean->wipe(); 

    R::freeze(); //no more schema changes! 
} 

Lo que está sucediendo en este ist sqlite:

create table img (id integer primary key autoincrement, url) 

lo que estaba esperando era la siguiente:

create table img (id integer primary key autoincrement, url text unique) 

Se puede lograr esto sin escribir SQL contra Redbean?

+0

Al observar que los documentos se han solucionado al respecto, consulte: https://github.com/gabordemooij/redbean/issues/159#issuecomment-5855404 – damianb

+0

Gracias Damianb- eso fue _real_ rápido. – andig

Respuesta

3

¿Qué versión de Redbean estás usando? Parece que actualizaron el buildcommand en la última versión. Esto es lo que dice el manual:

$bean->setMeta("buildcommand.unique" , array(array($property1, $property2))); 

enchufar en lo que tiene:

$bean->setMeta("buildcommand.unique" , array(array('url'))); 

Si eso no funciona, puede que tenga que leer el código real bajo la función setMeta y ver lo que es de hecho continúa.

Para hacer esto en una tabla existente es suficiente para "almacenar" un bean de vacío así- no hay datos necesita ser añadido a la base de datos:

$bean = R::dispense(IMG); 
$bean->setMeta("buildcommand.unique", array(array(...))); 
R::store($bean); 

(Una palabra de advertencia, si congela después haciendo esto, no se garantiza que tenga todas sus columnas)

+0

Excelente. El truco es usar buildcommand.unique junto con la matriz doble. – andig

+0

Adición: Para hacer esto en una tabla existente es suficiente para "almacenar" un bean de vacío así- no hay datos necesita ser añadido a la base de datos: $ frijol = R :: dispensación (IMG); $ bean-> setMeta ("buildcommand.unique", array (array (...))); R :: store ($ bean); – andig

Cuestiones relacionadas