2012-03-04 4 views
7

Если вы используете RedBean ORM, вам нужно добавить первичный ключ с именем «id» для каждой таблицы в вашей базе данных?Нужен ли RedBean первичный ключ «id»?

В моем db У меня есть несколько таблиц с парами первичных ключей из 2 или 3 полей или первичных ключей с другими именами, кроме «id» (да, я мог бы изменить имя на «id», т действительно отражает реальность, потому что они не являются идентификаторами)

Пример:

table1 - магазины сообщения:

id   INTEGER  PRIMARY KEY AUTOINCREMENT, 
    name   TEXT, 
    title  TEXT, 
    content  TEXT, 

tABLE2 - хранит мету для сообщений:

post   INTEGER  DEFAULT 0,  # <- references "id" from "posts" 
    name   TEXT, 
    value  TEXT, 
    PRIMARY KEY(name, post), 
    CONSTRAINT posts_meta FOREIGN KEY(post) 
    REFERENCES posts(id) ON DELETE CASCADE ON UPDATE RESTRICT 

Будет ли RedBean работать с подобной структурой db?

+0

Насколько я знаю, он должен иметь 'id' в качестве первичного ключа. Я пробовал его на таблицах без или с помощью 'table_id', и это не сработало. Возможно, есть способ настроить его на работу, но я не пробовал. –

ответ

10

К сожалению, с вашей текущей структурой таблицы вы не можете использовать RedBean. Каждая таблица должна иметь первичный ключ с автоматическим приращением. Небольшое падение, поскольку это затрудняет интеграцию в уже существующий продукт.

Несколько потоков, которые не удалось использовать RedBean из-за этого ограничения, с ответами от автора, Габор De Mooij:

http://groups.google.com/group/redbeanorm/browse_thread/thread/6d5582275326744f?pli=1

http://groups.google.com/group/redbeanorm/browse_thread/thread/4fa7b29b453dcdb8

RedBean не требует поле первичного ключа но называть его просто «id». Вы можете отформатировать имя столбца первичного ключа по своему вкусу, используя метод formatBeanID(), как показано в примере ниже, который условно привязывает имя таблицы к «id». например), таблица users будет иметь первичный ключ users_id. Используя это форматирование, вы можете получить подробное описание с указанием имени идентификатора.

http://redbeanphp.com/community/wiki/index.php/Prefixes

Надеется, что это ограничение будет снято в будущем, так как это действительно мешают интеграции в существующие продукты.

EDIT: В качестве альтернативы ORM, я хорошо слышал о доктрине: http://www.doctrine-project.org/. Я лично его не использовал, но, похоже, это стандарт для многих, работающих с PHP.

EDIT 2: Спасибо и кредит Джейсону за привлечение внимания нового метода интеграции RedBean в существующий проект, в котором ваша база данных не может быть настроена для него. Я хотел также обновить свой ответ, если люди все еще ссылаются на эту проблему. Габор предложил сделать представления, которые сопоставляются с таблицами, где вы можете настроить представление, чтобы иметь необходимую структуру для RedBean. Я лично не тестировал это, но он получил положительные отзывы от некоторых пользователей. Он добавляет некоторые дополнительные накладные расходы и обслуживание при изменении таблиц, но, по-видимому, является лучшим и наиболее полным ответом на эту проблему на сегодняшний день. http://www.redbeanphp.com/faq#beanformatter

+0

Журнал изменений RedBeanPHP 3.0: «... Удалено \t Bean Formatter, вы не можете больше настраивать схему базы данных (потому что это ломает вещи) ...« Я использую ReadBean v3.2 и что мне делать? –

+1

@Ostrovski Если вы пытаетесь интегрировать RedBean в уже существующий проект/базу данных, и вам нужны функции, предоставляемые BeanFormatter, я бы реализовал RedBean 2.2.3. Я не уверен в том, что нужно отказаться от BeanFormatter ... Кажется, RedBean движется к домену «новых проектов», где вы его реализуете и базу данных рука об руку. Проверьте, можете ли вы реализовать 2.2.3, или если вы хотите/должны использовать 3.0+, сделайте некоторое чтение, возможно, повторно внедряя эти классы, как предлагается в этом сообщении: https://groups.google.com/ forum /? fromgroups = #! topic/redbeanorm/wXUeT4Tj2uU – king14nyr

5

Принимаемый ответ не является строгим. Вы можете использовать существующую структуру таблицы, но вам нужно будет реализовать VIEW поверх каждой из таблиц, которые позволят вам переименовать столбец PKEY в ' Я бы'...Смотреть это письмо от Gabor - создатель RedBeanPHP:

https://groups.google.com/forum/#!searchin/redbeanorm/view/redbeanorm/wXUeT4Tj2uU/3AngnmVwZdYJ

+1

В ответах на его предложение это выглядит жизнеспособным решением. На самом деле это то же самое, что я заметил в своем комментарии, похоже, что поток остался активным, и Габор недавно предложил это потенциальное решение. Я отредактирую свой ответ, чтобы убедиться, что кто-то, кто приходит на эту страницу, не столкнется с устаревшим, устаревшим или неправильным советом. Спасибо за обновление! – king14nyr

+0

Вы также можете использовать функцию exec(), чтобы делать все, что вы чувствуете. Идентификатор предназначен только для beans, вы все равно можете вставлять/обновлять, как вам нравится. – Nick

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