Нужен ли RedBean первичный ключ "id"?
Если вы используете RedBean ORM, вам нужно добавить первичный ключ с именем " id " в каждую таблицу в вашей базе данных?
в моей БД у меня есть несколько таблиц, которые имеют пары первичных ключей из 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 работать с такой структурой БД?
2 ответов
к сожалению, с тем, как ваша текущая структура таблицы, вы не можете использовать RedBean. Каждая таблица должна иметь первичный ключ с автоматическим приращением. Небольшое падение, поскольку это затрудняет интеграцию в уже существующий продукт.
несколько потоков, которые не смогли использовать RedBean из-за этого ограничения, с ответами от автора, Габора де 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
. Используя это форматирование, вы можете получить как можно более подробную информацию с именем 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
принятый ответ не является строго истинным... Вы можете использовать существующую структуру таблиц , но вам нужно будет реализовать представление поверх каждой из таблиц, которое позволит вам переименовать столбец PKEY в "id"... См. это письмо от Габора-создателя RedBeanPHP:
https://groups.google.com/forum/#!searchin/redbeanorm/view/redbeanorm/wXUeT4Tj2uU/3AngnmVwZdYJ