2012-05-21 5 views
5

Ich möchte, dass RedBean beim Generieren des Schemas eindeutige Schlüssel/Indizes erstellt. Der folgende Code tut - entgegengesetzt, wie ich die Dokumentation verstehe - dies nicht tun:Kann RedBean ORM eindeutige Schlüssel erstellen?

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! 
} 

Was in SQLite ist passiert dies:

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

Was ich erwartet hatte, war dies:

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

Kann dies ohne Schreib SQL gegen redbean erreicht werden?

+0

Beachten Sie, dass die Dokumente zu diesem Thema behoben wurden, finden Sie unter: https://github.com/gabordemooij/redbean/issues/159#issuecomment-5855404 – damianb

+0

Vielen Dank Damianb - das war _real_ schnell. – andig

Antwort

3

Welche Version von Redbean verwenden Sie? Es scheint, als ob sie die buildcommand in der neuesten Version aktualisiert haben. Dies ist, was das Handbuch sagt:

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

Anstecken, was Sie haben:

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

Wenn das nicht funktioniert, können Sie den eigentlichen Code unter der setMeta Funktion lesen müssen und sehen, was ist tatsächlich weiter.

Um dies zu tun, auf einer vorhandenen Tabelle es zu „speichern“ eine leere Bohne wie this- ausreichend ist, werden keine Daten an die DB hinzugefügt werden muss:

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

(Wort der Warnung, wenn Sie nach einfrieren (Dies ist nicht garantiert, dass Sie alle Ihre Spalten haben)

+0

Ausgezeichnet. Der Trick besteht darin, buildcommand.unique zusammen mit dem Double-Array zu verwenden. – andig

+0

Nachtrag: Um dies zu tun auf einer vorhandenen Tabelle, um „Speichern“ eine leere Bohne wie this- ausreichend ist, werden keine Daten an die DB hinzugefügt werden muss: $ bean = R :: Abgabe (IMG); $ bean-> setMeta ("buildcommand.unique", Array (Array (...))); R :: speichern ($ bean); – andig

Verwandte Themen