Нет, фактически, модель с набором отношений $has_one
будет иметь поле, заканчивающееся на _id,
, которое ссылается на объект с набором отношений $has_many
.
Так, например:
class Recipe extends DataMapper {
var $has_many = array('product', 'rating', 'recipe_category');
var $has_one = array('recipe_source', 'user');
(...)
}
class Recipe_Source extends DataMapper {
var $has_many = array('recipe');
(...)
}
В этом случае DataMapper создал таблицу recipes
со столбцом recipe_source_id
и таблицу recipe_sources
, для которой не требовалось никаких дополнительных полей.
Теперь для отношений «многие ко многим» будет создана таблица соединения, которая следует строгому соглашению.
Имя объединенной таблицы будет состоять из двух множеств соединенных моделей, разделенных подчеркиванием в алфавитном порядке.
Итак, используя эту модель:
class Product extends DataMapper {
var $has_one = array('cheese_style', 'butter_style', 'cheese_flavor');
var $has_many = array('product_size', 'recipe');
(...)
}
Теперь я получаю таблицу соединений в моей базе данных с именем products_recipes.
Вот как это обрабатывается библиотекой DMZ DataMapper (http://www.overzealous.com/dmz/),, которая должна быть заменой старой библиотеки stensi DataMapper, поэтому я собираюсь предположить, что соглашения те же .
Несмотря на это, я настоятельно рекомендую переключиться на DMZ.