2012-05-21 32 views
5

我想讓RedBean在生成模式時創建唯一的鍵/索引。下面的代碼沒有 - 我反對如何理解文檔 - 不是這樣做的:RedBean ORM能夠創建唯一的密鑰嗎?

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

什麼是SQLite中IST發生這樣的:

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

我所期待的是這樣的:

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

可以這樣沒有寫SQL實現對紅豆?

+0

注意到這個文檔已經修復了這個,請參閱:https://github.com/gabordemooij/redbean/issues/159#issuecomment-5855404 – damianb

+0

謝謝damianb-那真的很快。 – andig

回答

3

您使用的是什麼版本的Redbean?看起來他們更新了最新版本中的buildcommand。這是手冊上說:

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

堵在你擁有的一切:

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

如果不工作,你可能有setMeta作用下讀取實際的代碼,看看是什麼實際上還在繼續。

要做到這一點對一個現有的表就足夠了「存儲」像這個 - 一個空豆沒有數據需要被添加到數據庫:

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

(提醒一句,如果你凍結後這樣做,你不能保證所有的列)

+0

優秀。訣竅是將buildcommand.unique與double數組一起使用。 – andig

+0

附錄: 爲此在現有的表就足夠了「存儲」等這 - 沒有數據需要被添加到DB的空豆: $豆= R ::分配(IMG); $ bean-> setMeta(「buildcommand.unique」,array(array(...))); R :: store($ bean); – andig