2012-05-21 2 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 ист это:

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

То, что я ожидал, что это было:

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

Может ли это быть достигнуто без записи SQL против RedBean?

+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 и посмотреть, что фактически идет дальше.

Для этого в существующей таблице, достаточно «магазин» пустой боб, как this- не должны быть добавлены в базу данных нет данных:

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

(Слово предупреждения, если вы заморозить после при этом вам не гарантируется наличие всех ваших столбцов)

+0

Отлично. Фокус в том, чтобы использовать buildcommand.unique вместе с двойным массивом. – andig

+0

Добавления: Для этого в существующей таблице, достаточно «магазин» пустой боб, как this- не должны быть добавлены в базе данных нет данных: $ боба = R :: банкомат (IMG); $ bean-> setMeta ("buildcommand.unique", array (array (...))); R :: магазин ($ bean); – andig

Смежные вопросы