У меня есть несколько мостов в одном классе результатов, которые имеют отношение к тому же еще Класс результата. Например, в классе Текст У меня есть несколько мостов для Пользователь класс. Итак, они будут по умолчанию названы пользователями и users_2s. Я могу переназначить эти имена с помощью опции rel_name_map, но вопрос в том, есть ли какая-то семантика этих имен? Как решено, какой из них будет называться пользователей и какой из них будет называться users_2s? Возможно, если я создам таблицы в другом порядке на другом компьютере, отношения будут названы в другом порядке, а пользователи станут users_2s и наоборот? Если я использую rel_name_map и решил переименовать их, могу ли я быть уверенным, что заказ будет всегда сохранен?Взаимодействие мостов в DBIC
ответ
Краткий ответ: база данных уже имеет имена для мостов, а DBIx :: Class будет использовать эти имена. Таким образом, вы можете избежать переименования их между запусками, пока вы не меняете свою базу данных между прогонами.
Если вы посмотрите на свою базу данных с помощью правильных инструментов/команд, вы должны увидеть имена «пользователи» и «user_2s», уже связанные с этими мостами. Каждый «мост» - это ограничение внешнего ключа и как таковое имеет имя в вашей схеме исходной базы данных. Функция библиотеки DBIx::Class::Schema::Loader::DBI::_table_fk_info
вызывает метод foreign_key_info обработчика DBD для получения мостов и использует данное имя.
Если обработчик не возвращает внешний ключ имен, то это будет генерировать новое имя, используя этот формат: __dcsld__$i
, где $i
это число, начиная с 1. Нумерация изменится только тогда, когда в базе данных, изменения схемы.
Это dscld
означает DBIx::Class::Schema::Loader
- и оно не соответствует вашим именам мостов, поэтому ваш код должен получать эти имена из базы данных.
Привет. Спасибо за ваш ответ. Думаю, я не очень четко сформулировал свой вопрос, поэтому я снова зашел: оба моих моста имеют часть внешнего ключа с идентичным именем «пользователь» и оба указывают на одну и ту же таблицу. У меня конфликт. Поэтому я программирую, что имя моста по умолчанию для первого моста, предлагаемое загрузчиком схемы, должно отображаться в «my_name», затем второй мост автоматически преобразуется в «my_name_2s», который, как я сказал, должен отображаться на «его имя». Поэтому мой вопрос заключается в том, могу ли я быть уверен, что «my_name» всегда будет отображать первый предложенный мост и «его имя» на второй на каждой машине, где я его создаю? –
Используете ли вы DBIx :: Class :: Schema :: Loader для создания схемы DBIx :: Class? Обратите внимание, что аббревиатура для DBIx :: Class - это DBIC, а не DBIx, который является целым пространством имен, включая множество разных дискурсов. –
Да, я использую DBIx :: Class :: Schema :: Loader –