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