Может ли RedBean ORM создавать уникальные ключи?

Я бы хотел, чтобы RedBean создавал уникальные ключи/индексы при создании схемы. Следующий код — в отличие от того, как я понимаю документацию — не делает этого:

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?


person andig    schedule 21.05.2012    source источник
comment
Отметив, что документация по этому поводу была исправлена, см.: github.com/gabordemooij/ redbean/issues/159#issuecomment-5855404   -  person damianb    schedule 22.05.2012
comment
Спасибо, damianb, это было очень быстро.   -  person andig    schedule 23.05.2012


Ответы (1)


Какую версию Redbean вы используете? Похоже, они обновили buildcommand до последней версии. Вот что написано в инструкции:

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

Подключаем то, что есть:

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

Если это не сработает, возможно, вам придется прочитать фактический код функции setMeta и посмотреть, что на самом деле происходит.

Чтобы сделать это в существующей таблице, достаточно "хранить" пустой bean-компонент, подобный этому - никаких данных не нужно добавлять в БД:

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

(Предупреждение: если вы зависнете после этого, вам не гарантируются все ваши столбцы)

person Tim Withers    schedule 21.05.2012
comment
Превосходно. Хитрость заключается в использовании buildcommand.unique вместе с двойным массивом. - person andig; 22.05.2012
comment
Приложение: Чтобы сделать это в существующей таблице, достаточно хранить пустой bean-компонент, подобный этому - никаких данных не нужно добавлять в БД: $bean = R::dispense(IMG); $bean-›setMeta(buildcommand.unique, array(array(...))); R:: хранить ($ bean); - person andig; 07.08.2012